以下代码,实现了仿QQ新的消息到时候,任务栏聊天窗口闪动高亮到效果,试用jna实现,以下为全部代码(如果你仅仅用到这一个功能,可以删除无用到代码)。
</pre><pre name="code" class="java">package com.eluotuo.client.utils;
import com.sun.jna.Native;
public interface User32 extends W32API
{
User32 INSTANCE = (User32)Native.loadLibrary("user32", User32.class, DEFAULT_OPTIONS);
boolean ShowWindow(HWND hWnd, int nCmdShow);
boolean SetForegroundWindow(HWND hWnd);
HWND FindWindow(String winClass, String title);
boolean FlashWindow(HWND hWnd, boolean bInvert);
HWND FindWindow(int winClass, String title);
HWND FindWindowEx(HWND hWnd, HWND childWnd, int wParam, int lParam);
HWND FindWindowEx(HWND hWnd, int childWnd, int wParam, int lParam);
boolean PostMessage(HWND hWnd, Integer Msg, Integer wParam, Integer lParam);
boolean PostMessage(HWND hWnd, int Msg, int wParam, int lParam);
boolean PostMessage(HWND hWnd, String Msg, int wParam, int lParam);
boolean PostMessage(HWND hWnd, String Msg, String wParam, String lParam);
boolean PostMessage(HWND hWnd, int Msg, String wParam, String lParam);
boolean PostMessage(HWND hWnd, int Msg, String wParam, int lParam);
boolean PostMessage(HWND hWnd, String Msg, String wParam, int lParam);
void keybd_event(String bVk, String bScan, String dwFlags, String dwExtralnfo);
void keybd_event(int bVk, String bScan, String dwFlags, String dwExtralnfo);
void keybd_event(String bVk, int bScan, int dwFlags, int dwExtralnfo);
void keybd_event(int bVk, int bScan, int dwFlags, int dwExtralnfo);
void keybd_event(int bVk, int bScan, String dwFlags, int dwExtralnfo);
void keybd_event(String bVk, int bScan, String dwFlags, int dwExtralnfo);
boolean SendMessage(HWND hWnd, Integer Msg, Integer wParam, Integer lParam);
boolean SendMessage(HWND hWnd, int Msg, int wParam, int lParam);
boolean SendMessage(HWND hWnd, String Msg, int wParam, int lParam);
boolean SendMessage(HWND hWnd, String Msg, String wParam, String lParam);
boolean SendMessage(HWND hWnd, int Msg, String wParam, String lParam);
boolean SendMessage(HWND hWnd, int Msg, String wParam, int lParam);
boolean SendMessage(HWND hWnd, String Msg, String wParam, int lParam);
}
package com.eluotuo.client.utils;
import java.util.HashMap;
import java.util.Map;
import com.sun.jna.FromNativeContext;
import com.sun.jna.Pointer;
import com.sun.jna.PointerType;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIFunctionMapper;
import com.sun.jna.win32.W32APITypeMapper;
public interface W32API extends StdCallLibrary
{
Map UNICODE_OPTIONS = new HashMap()
{
private static final long serialVersionUID = 1L;
{
put(OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE);
put(OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE);
}
};
Map ASCII_OPTIONS = new HashMap()
{
{
put(OPTION_TYPE_MAPPER, W32APITypeMapper.ASCII);
put(OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.ASCII);
}
};
Map DEFAULT_OPTIONS = Boolean.getBoolean("w32.ascii") ? ASCII_OPTIONS : UNICODE_OPTIONS;
public static class HANDLE extends PointerType
{
public Object fromNative(Object nativeValue, FromNativeContext context)
{
Object o = super.fromNative(nativeValue, context);
if (INVALID_HANDLE_VALUE.equals(o))
return INVALID_HANDLE_VALUE;
return o;
}
}
public static class HWND extends HANDLE
{
}
HANDLE INVALID_HANDLE_VALUE = new HANDLE()
{
{
super.setPointer(Pointer.createConstant(-1));
}
public void setPointer(Pointer p)
{
throw new UnsupportedOperationException("Immutable reference");
}
};
}
User32 user32 = User32.INSTANCE;
HWND hwnd = user32.FindWindow(0, "窗口标题");
user32.FlashWindow(hwnd, true);
利用java到 jna 实现user32所有到方法。