21. oktober 2003 - 23:11Der er
5 kommentarer og 2 løsninger
Anden metode end FindWindow
Findes der ikke en anden metode end "FindWindow" hvis man skal have det "nummer" et program har før man fx kan "traine" det? Hvis man fx har windowsxp kan man under processer se procesnavnet... kan man ikke "søge" efter det så man kan sætte sit program til at lede efter "notepad.exe" i stedet for "Unavngivet - Notesblok" ???
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
Slettet bruger
21. oktober 2003 - 23:16#1
Prøv det her:
Uses TlHelp32;
Type TEnumData = Record hW: HWND; pID: DWORD; End;
Function EnumProc( hw: HWND; Var data: TEnumData ): Bool; stdcall; Var pID: DWORD; Begin Result := True; If (GetWindowLong(hw, GWL_HWNDPARENT) = 0) and (IsWindowVisible( hw ) or IsIconic(hw)) Then Begin GetWindowThreadProcessID( hw, @pID ); If pID = data.pID Then Begin data.hW := hW; Result := False; End; { If } End; { If } End; { EnumProc }
Function WindowFromProcessID( pID: DWORD ): HWND; Var data: TEnumData; Begin data.pID := pID; data.hW := 0; EnumWindows( @EnumProc, longint(@data) ); Result := data.hW; End; { WindowFromProcessID }
Function WindowFromAppname32( appname: String ): HWND; { Take only the application filename, not full path! Need to pass the extension as well. } Var snapshot: THandle; processEntry : TProcessEntry32; Begin Result := 0; snapshot := CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); If snapshot <> 0 Then try processEntry.dwSize := Sizeof( processEntry ); If Process32First( snapshot, processEntry ) Then Repeat If AnsiCompareText( appname, ExtractFilename( StrPas(processEntry.szExeFile)) ) = 0 Then Begin Result:= WindowFromProcessID( processEntry.th32ProcessID); Break; End; { If } Until not Process32Next( snapshot, processEntry ); finally CloseHandle( snapshot ); End; { try } End; { WindowFromAppname32 }
Synes godt om
Slettet bruger
21. oktober 2003 - 23:19#2
Så får du nummeret sådan:
procedure TForm1.Button1Click(Sender: TObject); var Nummeret: HWND; begin Nummeret := WindowFromAppname32('notepad.exe'); end;
kan man ændre i " If (GetWindowLong(hw, GWL_HWNDPARENT) = 0) and (IsWindowVisible( hw ) or IsIconic(hw)) " så man også kan få "nummeret" på skjulte programmer?
Okay fandt ud af det... Skulle vel læses nogle gange :D Giver 30 point til hver da begge ting virker :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.