別のプログラムでテキストボックスを設定するためにWindows APIを使用しています... sysMonthCal32フォームを作成するボタンにリンクされた1つの編集を除いて、すべてが完全に正常に機能しています...
いくつかのスナップショットを使用すると、より明確になります。
編集 (ボタンのあるテキストボックス):
ボタンをクリックすると、フォーム SysMonthCal32 が表示されます (spy++ でも):
私のコードは次のとおりです。最初に編集でメッセージを送信しようとします(spy ++によって識別されますが、機能しません)。次に、sysMonthCal32を介して試します:
//birthdate
string bd = dd + "/"+ mm +"/"+ yyyy;
child = FindWindowEx(parent, child, "Edit", null);
lExStyle = (long)GetWindowLong(child, GetWindowLongParam.GWL_STYLE);
lExStyle &= ~(ES_UPPERCASE);
lExStyle &= ~(ES_READONLY);
SetWindowLong(child, GWL_STYLE, (uint)lExStyle);
DateTime dt = new DateTime(int.Parse(aaaa), int.Parse(mm), int.Parse(jj));
//SendMessage(child, DTM_SETSYSTEMTIME, IntPtr.Zero, dt.ToString()); //<-- doesn't work (child is the textbox)
btn = FindWindowEx(parent, btn, "Button", null); //<-- I find the button
SendMessage(btn, BM_CLICK, IntPtr.Zero, "0, 0"); //<-- I click it to make the sysMonthCal32 form appear.
IntPtr cal = FindWindow(null, "SysMonthCal32"); //<-- i find the form
//SendMessage(cal, DTM_SETSYSTEMTIME, IntPtr.Zero, dt.ToString());
//doesn't work
SendMessage(cal, WM_SETTEXT, IntPtr.Zero, bd); //bd= birthdate, doesn't work
私はインターネット上で多くのことを試しましたが、結果はありませんでした...おそらく誰かがここで解決策を持っていますか?
以下は、spy++ のさまざまなスナップショットです。
編集のスタイル:
メッセージを編集に送信した後、空白のままですが、スパイ++でこれを取得しました:
SysMonthCal32 フォームのスタイル: