Java から uint パラメーターを指定して SendMessage を呼び出そうとしていますが、int を uint に変換できません。Windows 関数であるため、SendMessage の uint パラメータを変更できません。これを行う方法はありますか?
背景: 私は実際に Processing を使用しており、次のチュートリアルに従って user32.dll にアクセスしています: http://processing.org/hacks/hacks:jnative
およびhttp://jnative.free.fr/SPIP-v1-8-3/article.php3?id_article=8
そして、これに従って SendMessage http://www.codeproject.com/KB/cs/Monitor_management_guide.aspxを呼び出しています
これが私のコードです。GetActiveWindow は正常に動作します。上記の 2 番目のリンクからのものです。
int SC_MONITORPOWER = 0xF170;
int WM_SYSCOMMAND = 0x0112;
int MONITOR_ON = -1;
int MONITOR_OFF = 2;
int MONITOR_STANDBY = 1;
HWND ValidHWND = org.xvolks.jnative.util.User32.GetActiveWindow();
org.xvolks.jnative.util.User32.SendMessage(ValidHWND, (UINT)WM_SYSCOMMAND,
(WPARAM)SC_MONITORPOWER, (LPARAM)MONITOR_STANDBY);
最後の行はエラーが発生した場所であり、タイプ User32 の予想される UINT は、私が提供した LONG には適用されないことを示しています。SendMessage も変更できません
上記の呼び出しで呼び出される対応する Java ファイルは次のとおりです。GetActiveWindow 部分はチュートリアルからのものであるため、正常に動作します。Sendmessage をそれに合わせて調整しようとしていますが、まだすべてを把握していません。ただし、ここでパラメーターを SendMessage に変更しても、コンパイラーが期待するものは変わらないため、取得しているエラーには問題はないと思います。int Msg を uint Msg から long Msg に変更しようとしましたが、コンパイラは上記のコードから uint を想定しています。
public class Paul_s_User32 extends User32 {
public HANDLE GetActiveWindow() {
JNative GetActiveWindow = new JNative(DLL_NAME, "GetActiveWindow");
GetActiveWindow.setRetVal(Type.INT);
GetActiveWindow.invoke();
HWND handle = new HWND(GetActiveWindow.getRetValAsInt());
GetActiveWindow.dispose();
return handle;
}
public IntPtr SendMessage(IntPtr hWnd, int Msg,
IntPtr wParam, IntPtr lParam) {
JNative SendMessage = new JNative(DLL_NAME, "SendMessage");
//SendMessage.setRetVal(Type.long);
SendMessage.invoke();
SendMessage(ValidHWND, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_STANDBY);
}