02. december 2007 - 02:37Der er
6 kommentarer og 2 løsninger
Finde aktive vindue med windows API
Hej,
jeg prøver at finde ud af hvordan man finder ud af navnet på hvilket vindue der er det aktive (det i focus) (og som ikke nødvendigvis er et af mit eget programs forms)
jeg har prøvet at bruge getforegroundvindow og den tilbagemelder med en handler, som man så kan sende videre til GetWindowText.
men getwindowtext giver kun vinduets Caption, så istedet for f.eks. firefox, så ville den i dette tilfælde tilbagemelde Eskperten | Opret spørgsmål - Mozilla Firefox istedet for mit ønskede Firefox (eller endnu bedre, sti'en til programmet (c:\...\...\firefox.exe))
jeg har også prøvet at bruge process.getprocesses men den fortæller ikke (hvad jeg ihvertfald kunne finde) hvilket vindue der er aktivt (plus at det er tidskrævende at skal kører en foreach af ca 100 processor hvergang den skal bruges (hvilket er tit)
er der nogen der har en god løsning på ovenstående..?
GetWindowModuleFileName synes jeg kun jeg kan få til at tilbagemelde filnavnet for applikationen selv..? hvis det er et andet program der er i focus, så melder den intet tilbage...
her er koden:
/// <summary> /// The GetForegroundWindow function returns a handle to the foreground window. /// </summary> [DllImport("user32.dll")] static extern int GetForegroundWindow(); [DllImport("user32.dll")] static extern int GetWindowText(int hWnd, StringBuilder text, int count); [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)] static extern uint GetWindowModuleFileName(int hwnd, StringBuilder lpszFileName, uint cchFileNameMax);
private string GetActiveWindow() {
const int nChars = 256; int handle; StringBuilder Buff = new StringBuilder(nChars);
Arne_V hvis du vil ha' halvdelen af point for din deltagelse, så smid et svar.
her er kode: /// <summary> /// The GetForegroundWindow function returns a handle to the foreground window. /// </summary> [DllImport("user32.dll")] static extern int GetForegroundWindow(); //This Function is used to get Active process ID...
[DllImport("user32.dll")] static extern Int32 GetWindowThreadProcessId(int hWnd, out Int32 lpdwProcessId);
public static Int32 GetWindowProcessID(int hwnd) {
//This Function is used to get Active process ID...
Int32 pid;
GetWindowThreadProcessId(hwnd, out pid);
return pid;
}
private string GetActiveWindow() {
const int nChars = 256; int handle; StringBuilder Buff = new StringBuilder(nChars); handle = GetForegroundWindow();
hmm, det forklarer ihvertfald hvorfor jeg ikke kan få det til at virke.. :) men der er jo så evt to alternativer kan jeg se, men om den fungere bedre en det jeg har bixet sammen, det er jo svært at sige.
Begge alternativerne gaar ogsaa via process id som din loesning. De bruger bare en Win32 metode fremfor en .NET metode til at finde filnavn udfra process id.
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.