Ho usato GetWindowLong api finestra di stato della finestra di una finestra in c#.
[DllImport("user32.dll")]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
Process[] processList = Process.GetProcesses();
foreach (Process theprocess in processList)
{
long windowState = GetWindowLong(theprocess.MainWindowHandle, GWL_STYLE);
MessageBox.Show(windowState.ToString());
}
Mi aspettavo di ottenere numeri http://www.autohotkey.com/docs/misc/Styles.htm, ma ho i numeri, come -482344960, -1803550644, e 382554704.
Devo convertire windowState variabile?? se è così, a che cosa?
Forse si dovrebbe convertire i valori in esadecimale e confrontarle con ciò che è previsto. Io non sono sicuro di aver sbagliato.
Holterman: hai ragione. Dovrei convertire tali valori e confrontare.
Holterman: hai ragione. Dovrei convertire tali valori e confrontare.
Ciò che è di strano su quei valori? Per esempio,
482344960
è equivalente a0x1CC00000
che assomiglia a qualcosa che si potrebbe aspettare di vedere come stile di finestra. Guardando gli stili di riferimento si è collegato, che èWS_VISIBLE | WS_CAPTION | 0xC000000
.Se si vuole testare per
WS_VISIBLE
, per esempio, si potrebbe fare qualcosa di simile:OriginaleL’autore Nate
Non so come è stato definito (importati) GetWindowLong ma solo il nome suggerisce, dovrebbe essere:
Holterman:
int
è corretto. Nel Win32 API,LONG
è a 32-bit con segno intero, che è equivalente a C#’sint
tipo. Il C#long
è a 64-bit integer.OriginaleL’autore Henk Holterman
Sembra che si probabilmente desidera utilizzare
GetWindowLongPtr
invece, e cambiare il valore di ritorno di unlong
. Questo metodo utilizza un diverso tipo di ritorno di LONG_PTR, che suona come quello che stai cercando.GetWindowLong http://msdn.microsoft.com/en-us/library/ms633584(VS.85).aspx
GetWindowLongPtr http://msdn.microsoft.com/en-us/library/ms633585(VS.85).aspx
Secondo MSDN se si esegue Windows a 64 bit è necessario utilizzare
GetWindowLongPtr
, perchéGetWindowLong
solo utilizza una versione a 32-bit, che fornisce i valori negativi dopo che è arrivata la fine del a 32-bit di lunghezza. Plus sembraGetWindowLong
è stato rimpiazzato daGetWindowLongPtr
, quindi è probabilmente la strada giusta da percorrere per lo sviluppo futuro.Questo è l’importazione si deve usare per restituire il valore
GetWindowLongPtr
..NET utilizza 64-bit
long
s a prescindere dalla piattaforma.OriginaleL’autore Nick Berardi