MCM_GETSELRANGE windows 메시지를 표준 MonthCalendar로 보내려고합니다. 문서를 기반으로 나는 행운과 함께 다음을 시도했다. (날짜는 아무것도 아니지만 [0 이외의 값으로 설정되지 않았으므로] 성공했다는 것을 나타내는 0이 아닌 반환 값을 얻는다. ?) :MonthCalendar에 MCM_GETSELRANGE 메시지를 보내려면 P/Invoke 서명이란 무엇입니까?
using System;
using System.Runtime.InteropServices;
namespace GetSelRange
{
class Program
{
static void Main(string[] args)
{
IntPtr targetWindowHandle = new IntPtr(68684130);
SYSTEMTIME[] dateRange = new SYSTEMTIME[2];
IntPtr success = SendMessage(targetWindowHandle, MCM_GETSELRANGE, IntPtr.Zero, dateRange);
}
#region Win32API
const uint MCM_FIRST = 0x1000;
const uint MCM_GETSELRANGE = MCM_FIRST + 5;
[StructLayout(LayoutKind.Sequential)]
private struct SYSTEMTIME
{
[MarshalAs(UnmanagedType.U2)]
public ushort Year;
[MarshalAs(UnmanagedType.U2)]
public ushort Month;
[MarshalAs(UnmanagedType.U2)]
public ushort DayOfWeek;
[MarshalAs(UnmanagedType.U2)]
public ushort Day;
[MarshalAs(UnmanagedType.U2)]
public ushort Hour;
[MarshalAs(UnmanagedType.U2)]
public ushort Minute;
[MarshalAs(UnmanagedType.U2)]
public ushort Second;
[MarshalAs(UnmanagedType.U2)]
public ushort Milliseconds;
}
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, SYSTEMTIME[] lParam);
#endregion
}
}
pinvoke.net이 어떻게 호출되어야하는지에 대한 제안이없는 것으로 보입니다.
고맙습니다.
+1 또한 비트 경계를 넘을 때주의하십시오. 한 프로세스가 32 비트이고 다른 프로세스가 64 비트 일 때이 접근법을 사용할 수 있는지 확실하지 않습니다. 가능하다해도 약간의 기술이 필요할 것입니다. –
한스 감사합니다! 우리는 우리의 프로세스에 속하지 않은 Window (우리는 자동화 프레임 워크에서 작업 중입니다)에 대해이 작업을 수행하고있는 것이 맞습니다. 우리는 실제로 표준 ListView 및 TreeView 컨트롤과 상호 작용할 때 매우 유사한 작업을 수행해야하므로 이러한 컨트롤을 모방 할 수 있습니다. 제쳐두고 월렛 달력이 존재하는 과정에서만 이것이 유효하다는 것을 어떻게 결정할 수 있었습니까? 아니면 개인적인 경험에서 나온 것입니까? 나중에 다른 컨트롤에 대한 참조를 요청합니다. – aolszowka
포인터 전달이 필요한 * 모든 메시지의 경우입니다. LV 및 TV 메시지의 대부분은 않습니다. AutoIt을보십시오. –