■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

Win32API質問箱 Build16
751 名前:デフォルトの名無しさん :04/02/13 10:39
マルチのときとかな

752 名前:高校生 :04/02/13 16:40
以前このスレで、
GetKeyState()が9x系で動かないと言いましたが、
また9x系でうまくいかない事がありました。

それは、Ellipse()です。
この関数を使って、ウインドウに楕円を描いています。
NT系でプログラムを実行すると、普通に楕円が描かれています。

ところが、9x系の場合、どうも描画が奇妙なのです。
どう奇妙かと言うと、
描画した円をまわりの部分が、
つまり円の左、右、上、下を囲む長方形部分が、
まるでファミコンがバグったように、砂嵐のように、塗りつぶされてしまうのです。

なにがいけないのでしょうか?

753 名前:デフォルトの名無しさん :04/02/13 16:56
プログラムが悪い

754 名前:高校生 :04/02/13 17:13
NT系では普通に動くんですが……。

Win98の友達に指摘されたんです。MEでも同じ症状が出ました。
NT系では今のところ、どれでも普通に動いています。

で、不思議な事に、不具合がでるPCとそうでないPCがあるのです。
学校にもWin98とWin95があったので試してみたのですが、
まったく問題なく動きました。

XPしか持ってないから、問題を三軒できないんです

755 名前:デフォルトの名無しさん :04/02/13 17:28
>>752
ドライバ

756 名前:デフォルトの名無しさん :04/02/13 17:37
>>752
> で、不思議な事に、不具合がでるPCとそうでないPCがあるのです。
> 学校にもWin98とWin95があったので試してみたのですが、
> まったく問題なく動きました。
のに、たまたまNT系である自分の環境で動くと
> 9x系でうまくいかない
> 9x系の場合、
とか勝手に決め付ける頭の悪さ

757 名前:デフォルトの名無しさん :04/02/13 17:49
互換モードでデバッグしたか?

758 名前:デフォルトの名無しさん :04/02/13 21:32
Windows 2000/NT のソースコードがネット上に流出
http://www.faireal.net/

759 名前:デフォルトの名無しさん :04/02/13 21:35
API関連だと思うので質問させていただきます。

cgiにフォームに記入してボタンを押した時のように、データを渡したいんです。
GETのようにアドレス(/hoge.cgi?data=onigiri)でわたすのでなく、
POST形式でデータで渡したいのです。

MFCを使うと簡単らしいので使ってみました。
CInternetSession
CHttpConnection
CHttpFile
使うことがわかりました。

openRequest(CHttpConnection::HTTP_VERB_POST,
SendRequest or Ex
使うこともわかりました。
(HTTP_VERB_GET形式でファイル取得も成功しました。)

でも、POST時のその前後の
WriteString等で渡すデータの渡し方の形式がわかりません。
どのような形式で渡せばいいのでしょうか?

ご教授ください。

760 名前:デフォルトの名無しさん :04/02/13 21:39
>>758
ぅぁぁ
純粋Cだ

ソースほしい。
めっさほしい。


どこにありますか?
もうないですか?

    §,; ________§; ,
  || §; /    § ヽ  ||
  |~~~§~     §'~~~~~~~|  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | ____§/"""ヽ,§_____  | < Winnyで流してください。
  |__|///(§  §)ノ////|__|///\________
 ⊆___)///ゝ___§ノ/////(____⊇////
 ///////////////ジュ〜////////////
 /////////////////////////////

761 名前:デフォルトの名無しさん :04/02/13 21:44
>>759
ttp://www.assist.media.nagoya-u.ac.jp/ASDP/aswiki.cgi/HTTP/POST


762 名前:デフォルトの名無しさん :04/02/13 21:45
winsockのソースチェックしたいな。

763 名前:デフォルトの名無しさん :04/02/13 21:49
>>758
なんか、すごくまともなソースだな。
コーディング規約とかもきっちりしてそうだし。

764 名前:デフォルトの名無しさん :04/02/13 21:52
>>763
でも何故pureCなんだ?
普通C++だろうに。
流石M$だな。


765 名前:デフォルトの名無しさん :04/02/13 21:54
>pureC
違うだろ

766 名前:デフォルトの名無しさん :04/02/13 21:58
もともと一部の大学や政府機関には開示してたんでしょ?
そういうとこに所属してて、「見まくってますが何か?」って香具師はおらんの?

767 名前:デフォルトの名無しさん :04/02/13 21:59
おりますが何か?

768 名前:デフォルトの名無しさん :04/02/13 22:04
マイクロソフトのソースを見たけりゃ
MFCのソースを見るがいいさ

769 名前:デフォルトの名無しさん :04/02/13 22:06
cppも混ざってますね。

770 名前:デフォルトの名無しさん :04/02/13 22:06
>>768
いやレベルが全然違う

771 名前:デフォルトの名無しさん :04/02/13 22:06
>>758
ウィンドウの矩形が画面の外だったら、ってのを
 MonitorFromRect(&m_rcWindow, MONITOR_DEFAULTTONULL) == NULL
とスマートに書いてるね。参考になる。

772 名前:デフォルトの名無しさん :04/02/13 22:16
いろいろ面倒なんでできるだけ流出コード貼らんでほしいんだが。

773 名前:デフォルトの名無しさん :04/02/13 22:20
>>772
ケチケチするなよMS

774 名前:デフォルトの名無しさん :04/02/13 22:22
専用スレ立てようぜ。
テンプレ↓
Windows 2000/NT のソースコードがネット上に流出
http://www.faireal.net/

Neowinがつかんだのはショッキングで、ことによると破滅的なニュースだ。
ネット上にWin2000とWinNTのコードが流通しているというのだ。
現時点ではコード全体がリークしたのかどうか不明だが、コンパイルしてみれば分かるというものだ。
Microsoft からのコメントはまだない。公式には未確認である。

ソースは200MB少々のアーカイブで解凍したら600MBくらい。
全体がリークしたのではない可能性が高い。
ソース全体は約40GBだろうとCNET。つまり本当だとしても、ごく断片がリークしただけらしい。
ただし1GBの書庫も出回っており、本当にどのくらいリークしたのかは未詳。

775 名前:デフォルトの名無しさん :04/02/13 22:23
これからどれくらい増えるか楽しみだな
全言語のページからWindows ソースコード 流出を検索しました。 約1,920件中1 - 100件目 ・検索にかかった時間0.33秒


776 名前:デフォルトの名無しさん :04/02/13 22:51
もうスレたってるよ
http://pc2.2ch.net/test/read.cgi/tech/1076661779/

777 名前:デフォルトの名無しさん :04/02/13 22:58
ソースって、M$社員になったらみんな見れるのかね。

778 名前:デフォルトの名無しさん :04/02/13 23:14
>>777
MSじゃなくても見れるよ。

779 名前:デフォルトの名無しさん :04/02/14 00:03
Win2000やXPでLANケーブルを外したり接続するとタスクトレイに
吹き出しが出るようになってるんだけど、その時のイベントって
何のイベントが発生してるか教えてくり。

780 名前:デフォルトの名無しさん :04/02/14 00:23
監視してるだけじゃないの?

781 名前:デフォルトの名無しさん :04/02/14 00:45
WM_USER+3147 ってのが通知メッセージかね?
Spy++でモサモサと飛んでるの見えるけど。

782 名前:781 :04/02/14 00:46
ゴメン。勘違いだった。寝ようかな…。

783 名前:デフォルトの名無しさん :04/02/14 03:11
WM_DEVICECHANGEは使えんかな?

784 名前:デフォルトの名無しさん :04/02/14 03:29
LANケーブルはずすと、イベントビューワに表示されるから
その辺のAPIで何とかなるのでは?

785 名前:デフォルトの名無しさん :04/02/14 04:34
しょうもない質問かもしれませんが聞いてください。
ウィンドウプロシージャをクラスに内包しようとしてたとえば下記のようなものを作りました。
class Window {
Create();
static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
}
CreateのときにWNDCLASSEX構造体のcbWndExtraにsizeof(Window*)、CreateWindow
の最終パラメータにthisを渡し、WndProc関数内で
Window* pWindow = (Window*)GetWindowLong(hWnd, 0);
if (pWindow == NULL) {
if (msg == WM_CREATE) {
pWindow = (Window*)((LPCREATESTRUCT)lParam->lpCreateParams);
SetWindowLong(hWnd, 0, (LONG)pWindow);
} else {
return DefWindowProc(省略);
}
pWindow->WindowProc(省略);
}
WM_CREATE直後にプログラムが応答しなくなります。
SetWindowLongの失敗を疑ってSetLastError(0)してからGetLastErrorでチェックしてみたの
ですが一応正常に処理できているようです。
どこか直すべき点がありますでしょうか?

786 名前:デフォルトの名無しさん :04/02/14 05:40
RegisterClassで拡張ウインドウメモリは確保してるのか?

これでもいけると思う。
Window* pWindow = (Window*)GetWindowLong(hWnd, GWL_USERDATA);
if( !pWindow ) {
pWindow = (Window*)lpcs->lpCreateParams;
::SetWindowLong( hWnd, GWL_USERDATA, (LONG)pWindow );
}

787 名前:785 :04/02/14 06:03
>>786
WNDCLASSEX wcex;
wcex.cbWndExtra = sizeof(Window*);
の指定をしてRegisterClassEx(&wcex)してあります。
GWL_USERDATAを指定してみてもだめでした…。
if (msg == WM_CREATE) をはずすとAccessViolationが発生してしまいます。
(これは当然のような気がします)

うーん、クラス化はあきらめてゴリゴリ書くしかない…か。


788 名前:デフォルトの名無しさん :04/02/14 07:54
WndProc全体が書いてないからもう何とも言えん。
ブレークポイント仕掛けて追うのがいいと思うよ。

789 名前:デフォルトの名無しさん :04/02/14 07:55
>>787
なあ、デバッガー持ってないわけ?

790 名前:デフォルトの名無しさん :04/02/14 09:08
>>785
if文がどういう繋がりか見づらいね...
自分は下記のようにしているよ。

if (WM_NCCREATE==uMsg) {
LPCREATESTRUCT pcs = (LPCREATESTRUCT)lp;
CWnd* Wnd = (CWnd*)pcs->lpCreateParams;
::SetWindowLong(hWnd,GWL_USERDATA,(LONG)Wnd);
Wnd->hWnd = hWnd;
}

CWnd* Wnd = (CWnd*)::GetWindowLong(hWnd,GWL_USERDATA);
if (NULL==Wnd) {
return ::DefWindowProc(hWnd,uMsg,wp,lp);
} else {
return Wnd->DispatchEvent(hWnd,uMsg,wp,lp);//WindowProc(関数名が違うだけ)
}


791 名前:790 :04/02/14 09:12
うわぁ。
半角スペースが意味ないようなので全角スペースで字下げ。

if (WM_NCCREATE==uMsg) {
  LPCREATESTRUCT pcs = (LPCREATESTRUCT)lp;
  CWnd* Wnd = (CWnd*)pcs->lpCreateParams;
  ::SetWindowLong(hWnd,GWL_USERDATA,(LONG)Wnd);
  Wnd->hWnd = hWnd;
}

CWnd* Wnd = (CWnd*)::GetWindowLong(hWnd,GWL_USERDATA);
if (NULL==Wnd) {
  return ::DefWindowProc(hWnd,uMsg,wp,lp);
} else {
  return Wnd->DispatchEvent(hWnd,uMsg,wp,lp);//WindowProc(関数名が違うだけ)
}


792 名前:デフォルトの名無しさん :04/02/14 09:32
>>785
こらこら、気は確かか?(w
もまいはmsg==WM_CREATEのときにpWindow->WindowProc(省略)を実行しているわけだが

793 名前:デフォルトの名無しさん :04/02/14 10:17
俺はこんな感じにしてるけど、問題なくいけてる。
LRESULT CALLBACK base_Window::initWindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
if (uMsg == WM_CREATE)
{
base_Window *this_ = (base_Window *)((LPCREATESTRUCT)lParam)->lpCreateParams;
::SetWindowLong(hwnd,0,(long)this_);
::SetWindowLong(hwnd,GWL_WNDPROC,(long)staticWindowProc);
return this_->WindowProc(hwnd,uMsg,wParam,lParam);
}
return ::DefWindowProc(hwnd,uMsg,wParam,lParam);
}

ところで>785
>WM_CREATE直後
って具体的にどこやねん。
そこを教えて貰わんと判らんのとちゃうんか?

794 名前:デフォルトの名無しさん :04/02/14 10:45
>>785

>>788も言ってるけど、WndProc全体を書いたほうがいいと思うよ。

あれだけから判断すると、pWindow==NULLの時しか処理してない気がするんだけど。


795 名前:785 :04/02/14 17:29
沢山のレスありがとうございます。
WndProc全体はこんな感じになります。
LRESULT CALLBACK Window::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 Window *pWindow = (Window*)GetWindowLong(hWnd, GWL_USERDATA);
 if (pWindow == NULL) {
  if (uMsg == WM_CREATE) {
   pWindow = (Window*)(((LPCREATESTRUCT)lParam)->lpCreateParams);
   SetLastError(0);
   if (SetWindowLong(hWnd, GWL_USERDATA, (LONG)pWindow) == 0) {
    ReportError(hWnd, GetLastError());
   }
  } else {
   return DefWindowProc(hWnd, uMsg, wParam, lParam);
  }
 }
 return pWindow->WindowProc(hWnd, uMsg, wParam, lParam);
}


796 名前:785 :04/02/14 17:32
WM_CREATE直後というのは、GetWindowLongの手前に簡単なメッセージボックス
を出させるようにしていたのですがpWindow->WindowProcでWM_CREATEを実行
した後応答なしになってしまいます。

うーん、デバッガいりますね…探してきます。


797 名前:デフォルトの名無しさん :04/02/14 20:31
>>796
VC++とか使ってないの?

798 名前:785 :04/02/14 20:36
>>797
いや、使ってないんですよ。
Digital Mars C++にPlatformSDKつっこんで使ってるんで…。


799 名前:デフォルトの名無しさん :04/02/14 20:44
>796
だから
>pWindow->WindowProcでWM_CREATEを実行
の部分をを晒せと。

800 名前:デフォルトの名無しさん :04/02/14 21:10
【アップローダー==ラウンジ】
(質問が長い時はココ使うと便利 回答者もコードが長ければここに)
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

801 名前:デフォルトの名無しさん :04/02/14 21:25
>>799
Window::WindowProc()側に問題があるのでは?ということですか。

たしかにuMsg==WM_CREATEが成立した場合、呼び出しますね。

802 名前:785 :04/02/14 21:48
>>799
ごめんなさい、そっちを疑っていませんでした…。
WM_CREATEでTimerIDを作る部分で無限ループに陥っているんだと思います。
大変申し訳ありませんでした。
case WM_CREATE:
 SetWindowRgn(hWnd, NULL, TRUE);
 AnimateWindow(hWnd, 1000, AW_SLIDE | AW_VER_NEGATIVE);
 while (SetTimer(hWnd, m_nTimerID, 15000, NULL)) { //ここから3行が問題
  m_nTimerID++;
 }
break;
ということでこの3行を削ることで解決しました。
問題が変わってしまいましたが、正しくはm_nTimerIDが初期化されているとして
while (!SetTimer(hWnd, m_nTimerID, 15000, NULL)) {
 m_nTimerID++;
}
こうですよね?(SetTimerは失敗すると0を返す)

くだらない質問に長々とつきあって頂いてありがとうございました。
もっと精進してきます。

803 名前:779 :04/02/15 01:07
>783

ん〜WM_DEVICECHANGEやったけど、呼んでくれんかった。。はふー。

804 名前:779 :04/02/15 02:19
IP HELPER APIでLANが外されてるか接続されてるかは取得できる事は
わかったのだが、出来ればイベントで拾いたいな。
監視するのはアホらしいし。

805 名前:デフォルトの名無しさん :04/02/15 02:50
ファイルのハードリンクを作りたいんですけど、どうすればいいのですか?

806 名前:デフォルトの名無しさん :04/02/15 03:22
('A`)ノ 今日知った事〜

アップダウンコントロールに WS_CLIPSIBLINGS をつけて
任意のエディットコントロールを buddy としてセットすると
エディットコントロールの右辺のラインがうまく隠れなくて
ちょっと不恰好に表示される。

ワタスの貴重な2時間が消えて行った…… ('A`;)ノ

807 名前:デフォルトの名無しさん :04/02/15 10:39
>>805
NTFSならくりえーとはーどりんく
FATならセクタを直接書き換えてクロスリンクさせる → chkdskでギルティ

808 名前:高校生 :04/02/15 12:34
>>752
NT系では普通に動く。
9x系だと動作が変。(周りが砂嵐)

互換モードで試したが、問題が再現しない。


809 名前:デフォルトの名無しさん :04/02/15 12:41
>>752
ビットマップは作成してから初期化するまで各ピクセルは不定値という仕様になっている。
9x系の挙動が典型的、NT系の挙動は不定値がある事情により0=黒なだけ。

810 名前:デフォルトの名無しさん :04/02/15 19:24
じゃあやっぱりなんでもかんでも9xのせいと決め付けるアホのせいで
>>753が正しいということね

811 名前:デフォルトの名無しさん :04/02/16 01:27
>>809
「ある事情」ってのがすごく気になる。
セキュリティとか?(他プロセスが使ってたデータが残ってたりとか)

812 名前:779 :04/02/16 03:39
あーーー駄目だ。マジでもうわかんねー。誰かおせーてくれや。

813 名前:デフォルトの名無しさん :04/02/16 06:18
監視すれ

CD-ROMドライブのトレイの開け閉めは、ドライブ側から通知してくれているものだと
思ったけど、調べたらOS側からSCSIコマンドを一定期間で送ってドライブの状態を
得ているだけだった。

814 名前:デフォルトの名無しさん :04/02/16 20:24
>>811
ぴんぽん

815 名前:デフォルトの名無しさん :04/02/17 11:32
IEに貼り付けるムービープレイヤのActiveX作ってるのですが、
IE側でスクロールするとちらついてしまうので
その間は描画を止めたいと思っています。
IEのスクロールを検知するにはどうしたらよいのでしょうか。
システムフックするしかないのでしょうか?

816 名前:デフォルトの名無しさん :04/02/17 11:40
>>575

817 名前:デフォルトの名無しさん :04/02/17 12:06
WinMainのlpCmdLineのコマンドライン引数をCommandLineToArgvWで
argv形式に変換した場合

lpCmdLine (NULL)c:\document and settings\(いろいろ...)
argv[0] c:\document(NULL)
argv[1] and(NULL)
argv[2] settings\(いろいろ...)
みたいな感じで分けられてしまいます
lpCmdLine++;
wcscpy(my_path,lpCmdLine);ってやると大体出せます
だけどなぜかコマンドプロンプトで引数付きで呼び出すと自分のパスが取り出せません
WinMainとは違ってなんかややこしいです
どうしたら正確な自分のパス名を引き出せますか?

818 名前:デフォルトの名無しさん :04/02/17 12:17
GetModuleFileNameは?

819 名前:デフォルトの名無しさん :04/02/17 13:35
>>817
マルチポストしたわけは?

820 名前:デフォルトの名無しさん :04/02/17 16:40
他のアプリケーションのボタンのキャプション変えたり、フォント変えたりするのは
SendMessageでいける?

821 名前:デフォルトの名無しさん :04/02/17 17:00
>>820
それぐらい自分で試せ

822 名前:デフォルトの名無しさん :04/02/17 17:06
ボタンのキャプションは変えられるが、フォントの変え方が分からん。

823 名前:デフォルトの名無しさん :04/02/17 17:33
俺様のアプリのフォントを勝手に変えるなヴォケ

824 名前:デフォルトの名無しさん :04/02/17 17:37
てめえの糞ソフトのフォントなんか変えるに値しないな

825 名前:デフォルトの名無しさん :04/02/17 17:40
テメェの糞キャプションを補正してやってんだ。有難いと思え>823

826 名前:デフォルトの名無しさん :04/02/17 17:42
>>823
変更されないように細工しとけ。

827 名前:デフォルトの名無しさん :04/02/17 17:46
変更されないように細工?バカじゃねーか?

828 名前:デフォルトの名無しさん :04/02/17 18:01
まずは、外部からフォントを変更することにより発生する問題などを把握しような。

829 名前:デフォルトの名無しさん :04/02/17 18:14
MS Sans Serifきめうちな海外ソフトでバイナリhack無しに日本語を表示させる手段としては
外部からの書き換えもいいと思うよ

830 名前:デフォルトの名無しさん :04/02/17 18:19
で、どうすればいいのですか?

831 名前:デフォルトの名無しさん :04/02/17 18:29
メッセージでフォントを切り替えるプログラムもそうそう無いだろう
で、どんなメッセージ送ったんだ?

832 名前:829 :04/02/17 18:32
実は>>829で書いたような小細工ツールが欲しいなと思っただけだったり

833 名前:デフォルトの名無しさん :04/02/17 18:36
一応WM_SETFONTを送ってみました

834 名前:デフォルトの名無しさん :04/02/17 18:36
SendFontでも使えよ。

835 名前:デフォルトの名無しさん :04/02/17 18:45
>>833
DialogでかつStockObjectならいけるかもな

836 名前:デフォルトの名無しさん :04/02/17 18:55
>>834>>835 
ありがとうございました。SendFontの作者の方にメールを送って
変え方を聞きました。


837 名前:デフォルトの名無しさん :04/02/17 19:32
作者タン、ご苦労様…

838 名前:デフォルトの名無しさん :04/02/17 19:34
教えてもらえたんだろうか・・・







詳細キボン


839 名前:デフォルトの名無しさん :04/02/17 19:42
>>816
いやレスポイントされても。
誰も答えないってことは
結局そんなことできねーっていうことですかね。

840 名前:デフォルトの名無しさん :04/02/17 20:31
日本語WIndowsには欧文フォントが指定されていても、
日本語を正しく表示する機能があるんだが、
あまり知られていないようだな。


841 名前:デフォルトの名無しさん :04/02/17 22:36
質問です。

AVISaveOptionsの圧縮ダイアログでコーデックをWMV9VCMにして、
色々圧縮設定いじったあとにAVISaveVで圧縮保存したとき、
全フレームがキーフレームになったファイルができてしまいます。

WMV9VCM以外のコーデックを選んだときはちゃんと設定した値で
圧縮してくれます。

WMV9VCMってAVISaveOptionsで設定できないのでしょうか?
どなたかご教授ください。

環境:Win2k Pro, VB6sp5



842 名前:841 :04/02/17 22:44
あ、VBはこっちじゃ聞いちゃダメみたいですね。
板汚しすいませんでしたl。

843 名前:デフォルトの名無しさん :04/02/18 01:16
>>832
Emigrant32
>>839
いやコピペされても。
誰も答えないってことは
コピペに異議ありっていうことですかね。

844 名前:デフォルトの名無しさん :04/02/18 02:00
市松模様を表示するプログラムを教えてください。
8×8マスのものです。

845 名前:デフォルトの名無しさん :04/02/18 02:15
Win32APIで市松模様?

846 名前:デフォルトの名無しさん :04/02/18 02:33
#define CR _T("\r\n")
#define T _T("■□■□■□■□") CR _T("□■□■□■□■")
DrawText(dc, T CR T CR T CR T, -1, &rect, DT_LEFT);

847 名前:デフォルトの名無しさん :04/02/18 05:53
質問です。こういう方法じゃ無理なのでしょうか・・・
[目的]F1でヘルプが表示される動作を殺したい(他プロセスのウィンドウ)
[やったこと]SetWindowsHookExでWH_KEYBOARDのグローバルフックをかけ、
そのプロシージャでF1のキーコードのメッセージを破棄するDLLを作成した。
[結果]世界はなにもかわらなかった。

848 名前:デフォルトの名無しさん :04/02/18 06:14
>>847
F1キーのメッセージ自体は取れてるの?

849 名前:デフォルトの名無しさん :04/02/18 07:14
WM_HELPを破棄した方がいいんじゃない?

850 名前:デフォルトの名無しさん :04/02/18 10:23
>>847
もしかしたら、WH_KEYBOARD_LLの方じゃないとダメとか。
そうなると、Win9x系では使えませんが…。

851 名前:デフォルトの名無しさん :04/02/18 11:46
>>843
でも結局誰も答えられねーんでしょ

852 名前:デフォルトの名無しさん :04/02/18 12:11
答えられないと思ってるんならここで聞くなよw

853 名前:デフォルトの名無しさん :04/02/18 14:16
遅レスすみません
>>848-850
F1キーのメッセージ自体はとれてました。
WH_KWYBOARD_LLではできるようです。
ただ、できればWin9xでも動くようにしておきたいんですよね・・・
WM_HELPとは、ウィンドウに送られてくるメッセージでしょうか。
WH_CALLWNDPROCではメッセージの破棄ができないようなのですが、
もしかして私は馬鹿なこと言ってます?

854 名前:デフォルトの名無しさん :04/02/18 15:33
クラス化したダイアログボックス上のコンボボックスについての質問です(SDKのみ)。

ボタンおよびエディット部分をクリックしても、
コンボボックスのすぐ下に黒い横線が表示されるだけで、
リスト一覧が表示されずに悩んでいます。
(フォーカスがあたっている状態で、マウスホイールを上下に動かすと、
 エディット部分の表示は設定してあるリスト通りに変わります)

こういう場合、各CBN_xxxxメッセージを拾って処理しないといけないのでしょうか?
(CBN_DROPDOWNを拾ってCB_SHOWDROPDOWNを送るとcpu100%になりましたが...)



855 名前:デフォルトの名無しさん :04/02/18 15:36
>>854
クラス化ってサブクラス化のことか?
だとすれば、いらんことをやっている可能性大。

856 名前:デフォルトの名無しさん :04/02/18 15:37
>>854
コンボボックスのサイズが小さすぎ。
ダイアログリソースでもっと高さを高くするか、
MoveWindow で高さを増やしてください。

・・・コンボボックスの場合 Window の高さで「ドロップダウンしたときの
リスト込みの大きさ」を指定するわけですが。

857 名前:854 :04/02/18 15:46
>>856
ありがとうございます。
今まで「ダイアログボックス」の高さを変更していました(^^;


858 名前:デフォルトの名無しさん :04/02/18 18:03
>>847 ヘルプファイルをダミーに入れ替える、のはダメかな…

859 名前:デフォルトの名無しさん :04/02/18 18:25
>>853
WH_CALLWNDPROCじゃなくてWH_GETMESSAGEではダメですか?
たしか↑はメッセージの通知を受けるだけだったはず

860 名前:デフォルトの名無しさん :04/02/18 21:07
>>846
「: error C2065: 'rect' : 定義されていない識別子です。」ってなります。
rect はどのように定義すればいいのですか?
dc のところは hdc に直しました。
#define はどこで定義すればいいのですか?
あと黒いマスを緑色にしたいです。
これらは WM_PAINT の中に書けばいいんですよね?


861 名前:デフォルトの名無しさん :04/02/18 21:17
RECT rect;

862 名前:デフォルトの名無しさん :04/02/18 21:24
おっとあれが進行してるとは思わなかったぜ・・・

863 名前:デフォルトの名無しさん :04/02/19 01:44
プロセスが自動で仮想メモリを確保してるっぽいんですが、
これが未使用だったら解放するのを強制するAPIってありますか?

864 名前:デフォルトの名無しさん :04/02/19 01:47
>>863
自分のプログラムで確保したメモリを、外部から勝手に解放されたらどうなると思う?

865 名前:863 :04/02/19 01:56
>864
具体的にはCView内である操作をすると勝手に仮想メモリを確保してしまい、
CViewが破棄されてもそれが解放されなくて困ってます

866 名前:デフォルトの名無しさん :04/02/19 03:31
>>863
兄が自分の夕食を作っていました。
そこへ、君がやってきて兄がちょっと目を離した隙に食べちゃいました。

どうなりますか?

867 名前:デフォルトの名無しさん :04/02/19 03:52
ていうか、ここW32APIスレだよな?

868 名前:デフォルトの名無しさん :04/02/19 04:35
>>866
お兄ちゃんは
「何で妹じゃないんだ…」
と、日々溜め込んできた辛い思いが一気に爆発し、うなだれる事でしょう。

869 名前:デフォルトの名無しさん :04/02/19 08:56
>>865
MFCスレ逝け

870 名前:デフォルトの名無しさん :04/02/19 10:14
Excel VBA で使います
Date and Time Picker Control でドロップダウンリストを自動で表示させたいんだけど
CB_SHOWDROPDOWN みたいな方法があれば教えてください
今は暫定策としてフォーカス移して Alt + ↓キーを送ってます

871 名前:デフォルトの名無しさん :04/02/19 13:33
最近APIと関係ない質問が多いな

872 名前:デフォルトの名無しさん :04/02/19 13:43
PSAPIってピサピーって呼びますか?

873 名前:デフォルトの名無しさん :04/02/19 13:54
ピーサピ

874 名前:デフォルトの名無しさん :04/02/19 14:25
複数のリソースファイル(*.rc)を使っているのですが
なんでもいいのでファイルを変更してビルドすると

obj : fatal error LNK1000: Internal error during Pass2

とかでてきます。
もう一度ビルドするとエラーがなくなります。
どっかバッティングしてるのでしょうか?
複数の*.rcファイルを使うときに注意することって何があるのでしょうか?

ちなみにrcファイルは一度作ったものをコピーしてテキストエディタで開いて
Resource.hのところを変更して使っています。(変更箇所はファイルごとに2箇所ぐらいです)
ちなみにResource.hも複数あります。
もちろんファイル名はResource0.h Resource1.h Resource2.hとかなっています。
リソースファイルを複数使ってる方おりましたらアドバイスよろしくおねがいします。

875 名前:デフォルトの名無しさん :04/02/19 14:34
APIのエロい人に質問です。
「英数」キーが離されたことを検出する方法があれば教えてください。
メッセージで検出しようとしても、WM_KEYDOWN なら送られてくるんですが、
「ひらがな」「カタカナ」キーを押さない限り、WM_KEYUP が送られてこないんですよ。

876 名前:デフォルトの名無しさん :04/02/19 14:52
DirectInputのサンプルで「英数」キーの動きを見れば、
まあ大概、無理だと判るだろう。特に日本語キーボードは、
Shift+英数がCapsLockなのでこのあたりの対処が惨い。
だからどうにかするなら、ドライバレベルまで降りてくるより他にない。

877 名前:874 :04/02/19 15:35
すいません。
ありました。
http://www.microsoft.com/japan/developer/library/vcmfc/_mfcnotes_tn035.htm

878 名前:875 :04/02/19 15:46
>>876
なるほど。やはりAPIレベルでは無理でしたか…。
丁寧な解説をどうもありがとうございました!

879 名前:デフォルトの名無しさん :04/02/19 16:26
なぜMSGをプロシジャーにおくることをdispatchというのですか?

880 名前:デフォルトの名無しさん :04/02/19 16:37
送るから

881 名前:844 :04/02/19 18:34
市松模様のことですが、
int n=8,x=100,y=100,a=40; // nは8マス,xとyは座標,aは中に置くコマの大きさ
int xx=140;           // xxは座標
int m=1;            // mは1マスと言う意味

 // 四角形1マスの色(白)
 Hdr = CreateSolidBrush(RGB (255,255,225));
 HdrOld = SelectObject(hdc,Hdr );
 // 四角形1マスを描く1
Rectangle(hdc,x,y,x+a*m,y+a*m);
SelectObject(hdc,HdrOld);
DeleteObject(Hdr);

 //四角形1マスの色(緑)
 Hdr = CreateSolidBrush(RGB (0,155,0));
 HdrOld = SelectObject(hdc,Hdr );
 //四角形1ますを描く2
 Rectangle(hdc,xx,y,xx+a*m,y+a*m);
 SelectObject(hdc,HdrOld);
 DeleteObject(Hdr);

これだとxが100yが100の所に白と、xが140yが140の所に緑が1つずつしか書けない
のですが、これに何か付け加えて8マス×8マスの市松模様を作れませんか?
これを繰り返せばいいのかと思っているのですが、どのようにすればいいのか
よく分かりません。お分かりになる方教えていただけないでしょうか?
(もちろんAPIです)



882 名前:デフォルトの名無しさん :04/02/19 18:50
>>881
Cの勉強をしましょう。APIとは特に関係のない部分ですね。

883 名前:デフォルトの名無しさん :04/02/19 19:49
API的にやるなら市松のビットマップつくって、それをブラシに設定。
一気に塗りつぶせばいいじゃない。

884 名前:863 :04/02/19 20:10
FreeUserPhysicalPagesみたいなAPIをご存知の方がいれば、と思い
質問したのですが、どうもCViewを出してしまったせいで
MFCと勘違いされてしまった方がいるみたいですね(汗

885 名前:デフォルトの名無しさん :04/02/19 20:56
>>884
>CView内である操作をすると勝手に
ここが重要なんじゃねーかよ

886 名前:デフォルトの名無しさん :04/02/19 21:15
>>884
SetProcessWorkingSetSize( hProcess, -1, -1) で何かが起こるかも?
でも、仮想メモリの使用量は変わらないか。

887 名前:デフォルトの名無しさん :04/02/19 21:51
外部のプロセスのトップレベルウィンドウのハンドルを
取得している状態で、
なんらかのメッセージを送って、
モーダルダイアログがとじれられている状態にしたいのですが
(ESCを押したような)
どうしたらよいでしょうか?

888 名前:デフォルトの名無しさん :04/02/19 21:54
そこから目的のウィンドウハンドルを取得して、メッセージを送る。

889 名前:デフォルトの名無しさん :04/02/19 21:58
モーダルダイアログのハンドルを手に入れるにはどうしたらよいでしょうか?

890 名前:デフォルトの名無しさん :04/02/19 22:08
(´-`).。oO("登録しる!"Dialogをオートで閉じる奴でも作るのかな…)

891 名前:デフォルトの名無しさん :04/02/19 22:11
SetWindowsHookEx( WH_CBT )

892 名前:887 :04/02/19 22:25
ある瞬間だけなので、フックを作るのは今回は適当でないかもしれません。
トップレベルウィンドウを列挙して、オーナーウィンドウを調べるのがよいかと思いました。
どうもありがとうございました。

893 名前:デフォルトの名無しさん :04/02/19 22:53
子ウィンドウならEnumChildWindowsとか

894 名前:デフォルトの名無しさん :04/02/20 01:08
WinNT系でAdministrator権限の必要な機能を一般ユーザー権限で使うには
サービスとして稼動させる以外の方法は無いのでしょうか?W32APIから多少
外れるようにも思いますが、よろしくお願いします。

895 名前:デフォルトの名無しさん :04/02/20 04:40
>>894
本当にどうしてもアプリケーションが必要とするなら
Administrator権限で起動しる! とReadMeに書く手もあるが。

896 名前:デフォルトの名無しさん :04/02/20 09:43
出来たらまずいだろう・・・


897 名前:デフォルトの名無しさん :04/02/20 10:40
今ならスイッチする方法なかったっけ
Administratorのパスワード要求されるけど

898 名前:デフォルトの名無しさん :04/02/20 11:12
「別のユーザーとして実行」できるな。


899 名前:デフォルトの名無しさん :04/02/20 12:51
それは結局Runasがサービスとして動いてるわけだが

900 名前:デフォルトの名無しさん :04/02/20 14:26
>>894 ユーザー名パスワードがわかればLogonUser,ImpersonateLoggedonUserあたり?

901 名前:デフォルトの名無しさん :04/02/20 18:45
プリンタのDPIを設定したディスプレイメモリDCを取得したいのですが、
メモリDCのDPIを変更するにはどうしたらいいんでしょうか?

mhdc = CreateCompatibleDC(printerhdc);
この普通にプリンタのDCから作る方法を使えないため、

dpi = GetDeviceCaps(printerhdc,LOGPIXELSX)
mhdc = CreateCompatibleDC(NULL);
としましたが、この後の設定に悩んでいます。

ご教授お願いいたします。


902 名前:デフォルトの名無しさん :04/02/20 19:08
用紙サイズでメモリDCを作ればいいだろう。
用紙サイズが分からずディスプレイと同じサイズにしたいのなら
ディスプレイ(96dpi)とプリンタのdpi比を掛ければいい

903 名前:デフォルトの名無しさん :04/02/20 19:17
一応ディスプレイの解像度(dpi)は変更可能だから決め打ちすんなよ。
……ってもあれ96dpi以外にするとそこらじゅうで描画破綻するけどな。

904 名前:デフォルトの名無しさん :04/02/20 23:31
質問させていただきます。
Windowのタイトルバーの文字列を指定してボタンを押すと、そのWindowをSW_HIDE状態に隠すツールを作っています。
SHOWボタンを押すとそのツールがHIDEさせたWindowが復帰します。

このツール、すでにSW_HIDEなWindowは除外したいのです。
HIDEさせたWindowのhWndをリストとしてもち、SHOWボタンを押したときそれらをSW_SHOWするので
別の理由でHIDEしていたWindowまでSHOWしてしまうからです。


GetWindowPlacementで
WINDOWPLACEMENTにWindow状態をとり、
lpwndpl.showCmdを調べてみたのですが、SW_HIDEしているWindowなのに
SW_HIDEではなく、
SW_SHOWMINIMIZED (最小化してからSW_HIDEされてる場合)や
SW_SHOWNORMAL (通常状態でSW_HIDEされてる場合)が格納されています。

何故SW_HIDEではなく、他のSW_が入っているのでしょう。
どうすればSW_HIDEしているかを取得できますでしょうか。

分かる方ご教授よろしくお願いいたします。

905 名前:デフォルトの名無しさん :04/02/20 23:47
>>904
>別の理由でHIDEしていたWindowまでSHOWしてしまうからです。
自分でHideさせたWindowHandleをリストとして保持してるのに、
なんで?

906 名前:デフォルトの名無しさん :04/02/20 23:54
Mutexオブジェクトの一覧を得る方法ってありますか?

907 名前:デフォルトの名無しさん :04/02/21 00:08
>>905
HIDEさせる時にリストとして保存し、SHOWするときはリストを参照してSHOWするのです。
ですが今のままだと、他のツール(自分のにしろ、他の隠す系のツールにしろ)
「これ」以外のツールによってHIDEされているWindowまでリストにいれてしまいます。

このツールの動作を
「タイトルが指定されているのに一致しており、現在HIDEでないWindowをHIDEさせ、
任意でそれらを再びSHOWできる」
にしたいのです。

今だと
「タイトルが指定されているのに一致しているWindowをHIDEさせ、任意に任意でそれらをSHOWできる」
となってしまい、最初からHIDEしていたWindowまで白日の下に晒してしまうのです。

分かりづらくて申し訳ないです。

908 名前:デフォルトの名無しさん :04/02/21 00:16
>>907

>「これ」以外のツールによってHIDEされているWindowまでリストにいれてしまいます。

原因わかってるじゃねーか。
じゃ、そこを直せばいい。

909 名前:デフォルトの名無しさん :04/02/21 00:18
ええ、なので対象のWindowがSW_HIDEしているか
GetWindowPlacementで調べようとしたのですが・・・

>>904の7行目以降な感じになってしまうのです。

910 名前:デフォルトの名無しさん :04/02/21 00:18
>>907
IsWindowVisible

911 名前:デフォルトの名無しさん :04/02/21 01:57
>>910
あー、忘れてた!
ありがとうございました。
計画どおりの動作をするようになりましたヽ(*´ー`)ノ

912 名前:デフォルトの名無しさん :04/02/21 02:08
>>902
>用紙サイズでメモリDCを作ればいいだろう

 ディスプレイDCでも用紙サイズ設定は出来るのですか?
ResetDCで試しましたがダメでした。
どのAPIで設定すれば良いのでしょうか?


913 名前:デフォルトの名無しさん :04/02/21 02:26
>>912
用紙サイズは縦横何インチ?
DPIは1インチ中に含まれるドット数なんだから、
用紙のサイズ*DPIでもとまるでしょ

914 名前:デフォルトの名無しさん :04/02/21 02:47
>>913
用紙はA4です。
プリンタDPIが600DPIで、5040,7128です。
これをどのようにしてディスプレイDCに設定するのかがわからないのです。

915 名前:デフォルトの名無しさん :04/02/21 03:13
ああ、ウインドウDCのスケールを調整したいという話か。
CreateCompatibleDCなんて持ち出すから、メモリDCの話かと思ったよ。

それならば求めるサイズのメモリDCに描画した後、
ウインドウDC(クライアントDC)にStretchBltをするか
SetMapModeのMM_ANISOTROPICを指定するか、
好きなほうを選んでくれ。

916 名前:デフォルトの名無しさん :04/02/21 04:14
>>915
ディスプレイメモリDCです。

プリンタのDPIを設定したディスプレイメモリDCが必要です。
つまり、96DPIのディスプレイメモリDCを600DPIにしたいのです。

>用紙サイズでメモリDCを作ればいいだろう。
ということでしたので、
ディスプレイDCにDPIを設定した後に、CreateCompatibleDCすると思ったのですが。

HDCに図形や文字を描画するActiveXエンジンがありまして、
ディスプレイメモリDCには正常に描画できるのですが、
プリンタメモリDCには正常に描画できないのです。

そのため印刷するには、一度ディスプレイメモリDCに描画した後に、
プリンタDCにStretchDIBitsしているのですが、
ディスプレイメモリDCから作成した互換BITMAPをプリンタのサイズにして描画すると、
図形は正常ですが、文字が非常に小さくなってしまうので、
描画前にDPIをプリンタと同じに出来ればと考えたのです。

非常に分かりにくくて申し訳ないです。

917 名前:デフォルトの名無しさん :04/02/21 04:28
もしかすると、、、
CreateCompatibleBitmapで該当サイズのビットマップを作って、
SelectObjectでメモリDCに設定する。
といったことが知りたかっただけ?


918 名前:デフォルトの名無しさん :04/02/21 04:45
>>900
そのAPI自体にAdminどころかLocalSystem権限が必要
CreateProcessWithLogonWはRunasサービスが必要だし

919 名前:デフォルトの名無しさん :04/02/21 04:53
>>917
>CreateCompatibleBitmapで該当サイズのビットマップを作って、
>SelectObjectでメモリDCに設定する。

916で書いてますように、描画は出来ています。
しかし、BITMAPのサイズを変更しても、
ディスプレイメモリDCのDPIは96のままで600にならず、
正常な文字の描画が出来ないため、
メモリDCのDPIのみを変更する方法が知りたいのです。


920 名前:デフォルトの名無しさん :04/02/21 05:12
SetMapMode で MM_TWIPS じゃ駄目すか?

921 名前:デフォルトの名無しさん :04/02/21 05:31
>>920
SetMapModeでもいろいろ試したんですが、
全体的に拡大縮小はできるのですが、DPIは変更できませんでした。
無理なんでしょうか。

描画前にFontのポイントサイズを変更するしかないのかな‥‥。


922 名前:デフォルトの名無しさん :04/02/21 06:51
>907
何か勝手に解決したみたいだが、何で
>「これ」以外のツールによってHIDEされているWindowまでリストにいれてしまいます。
こうなるのか俺にはさっぱり理解できない。
ShowWindow(HIDE)したHWNDを放り込むだけの処理に、
どうしたら他のHWNDを持ってこれるんだ?

923 名前:デフォルトの名無しさん :04/02/21 11:09
こんにちは。

あの、WIN32APIを用いて、
自作アプリケーションから、ある他のアプリケーションへ、メッセージ(Message)を送付する
プログラムを作りたいのですが、実現は可能でしょうか?

例えば、自作アプリケーション内に、あるボタン(Control)があるとして、
そのボタンを押すと、ある特定のメモ帳.exeにテキストが入力されるみたいな。

メモ帳は通常、キーボードからテキストが入力されますが、
そのテキスト入力を、自作アプリケーション側から、したいのです。

それを実現するには、WIN32APIだと、
どのような関数を使用するのでしょうか?


924 名前:デフォルトの名無しさん :04/02/21 12:24
FindWindow、SendMessage

925 名前:デフォルトの名無しさん :04/02/21 15:21
>921
fontで直接指定するのはpixelだった記憶があるが。
ちゃんとDPI指定して変換掛けてるか?

926 名前:デフォルトの名無しさん :04/02/21 17:01
>>920
それじゃ好みのdpiに設定できない
MM_ANISOTROPICを指定してSetWindowExtExとSetViewportExtEx で設定することになる
算数ができれば指定数値は割り出せるはずだから

927 名前:デフォルトの名無しさん :04/02/21 21:48
GETDCを使う意味がわかりません

928 名前:デフォルトの名無しさん :04/02/21 21:58
>>927
誰に聞いてるの?どのレスに対するレス?

929 名前:デフォルトの名無しさん :04/02/21 21:59
すいません、「教えてください」最後の文に書き加えるのを忘れました
」教えてくださいとい」うことでよろしくお願いします


930 名前:デフォルトの名無しさん :04/02/21 21:59
そういう場合は放置しとけ。

931 名前:デフォルトの名無しさん :04/02/21 22:02
アプリケーション実行中に Alt キーを押すと、OS が勝手に
プロセスの実行の権利を奪ってしまいますよね。

それを捕らえるためには WM_EXTERMENULOOP とかで良いと思うのですが、
他にも MessageBox とかを使用した場合も同じ事が起こります。

とりあえず、これらのように OS が実行権を奪う前にそれを知る
確実な手段は無いでしょうか?

もし無いのならば、上記2点だけに気を付けてコーディングすれば
良いのでしょうか?

932 名前:デフォルトの名無しさん :04/02/21 22:13
>>931
Altキーを押さなければいい

933 名前:デフォルトの名無しさん :04/02/21 22:26
起動中のアプリケーションのリストを作る場合ですが、
スナップショットAPIでは、実行ファイル名だけは取得できるのですが、
そのファイルのフルパスを取得する方法はないんですかねえ。

934 名前:デフォルトの名無しさん :04/02/21 22:42
>>933
http://nienie.com/~masapico/api_GetModuleFileNameEx.html

935 名前:デフォルトの名無しさん :04/02/21 22:42
>>933
EnumProcessで列挙してプロセスからフルパス取得

936 名前:933 :04/02/21 23:04
>>934,935
サンクス。スナップショットにIDがあるので、GetModuleFileNameEx()で行ってみます。
解決できそうです。ありがと。

937 名前:デフォルトの名無しさん :04/02/21 23:44
>>931
何をしようとしているのかによるが、一般論では思想的に間違っている。
PCの制御をハイジャックすることはユーザにとって脅威でしかない独善だ。

例えばマイクロ秒単位でタイミング保証の必要があるならアプリではなくハード+ドライバ。

938 名前:デフォルトの名無しさん :04/02/22 00:01
確認なんですが、CreateDIBSectionでnewしたメモリはdeleteしなくてもいいんですよね?

939 名前:デフォルトの名無しさん :04/02/22 00:03
>>937
いいえ。ハイジャックをするのでは無く、「知ること」ができればよいのです。

例として、Windows のアプリケーションで小さなロボットを動かすことを考えます。
アプリケーションがロボットに何も命令しなければ、ロボットは常に前進し続るように
設計されていますが、アプリケーションは3秒ごとにロボットに右へ曲がるように
命令することによって、ロボットは一定区域内で旋回し続けるようになっているとします。

しかし、Alt キーを押されると、3秒ごとの命令をアプリケーションは発生させることが
出来なくなってしまうので、そのままではロボットはいつまでも前進し続けることになって
しまいます。

OS が実行権を取得する事が事前に分かれば、ロボットに「止まれ」と命令をして、
実行権が戻ってきた時点で「進め」と命令すれば、何の問題もないのですが・・・

940 名前:デフォルトの名無しさん :04/02/22 00:04
それとALTキー検出に何の関連が・・・

941 名前:デフォルトの名無しさん :04/02/22 00:06
女性が「泥棒!」…無実?の68歳男性“ショック死”

 三重県警四日市南署は、同県四日市市内のスーパーで、今月17日に「泥棒」と叫び声を挙げた、
子連れの女性を捜している。「泥棒」呼ばわりされた男性(68)は、買い物客に取り押さえられた後に
死亡したが、防犯ビデオの分析などから、何ら犯罪行為をしていない可能性が強いという。

詳しくは、
http://headlines.yahoo.co.jp/hl?a=20040221-00000303-yom-soci
(2004/2/21/11:17 読売新聞 )

■こういう糞女には、ちゃんと責任取らせないとだめです。
 被害者の男性は、犯罪者の汚名を着せられたまま亡くなったのですよ。その無念を想像してください。

三重県警察本部059-222-0110 四日市南警察署0593-55-0110

https://www.police.pref.mie.jp/SITE1PUB/servlet/enquete.EnqueteForm/5
三重県警ご意見BOX
http://www.npa.go.jp/goiken/index.htm
警察庁ご意見箱

942 名前:デフォルトの名無しさん :04/02/22 00:08
>>941
車運転するときはじーさんばーさんにクラクション鳴らさないように気をつけてる。
勝手に死なれちゃかなわん。

943 名前:デフォルトの名無しさん :04/02/22 00:13
>>940
>それとALTキー検出に何の関連が・・・

別に ALT キーに拘っている訳ではなく、「モーダルな」動作に入ろうと
する時を確実に検出できればいいのですが。

944 名前:デフォルトの名無しさん :04/02/22 00:50
>>943
そもそも

> アプリケーション実行中に Alt キーを押すと、OS が勝手にプロセスの実行の権利を奪ってしまいますよね。

と言う認識が間違ってる。

945 名前:デフォルトの名無しさん :04/02/22 01:00
>943
スレッド使えよ

946 名前:デフォルトの名無しさん :04/02/22 01:02
>>944
>と言う認識が間違ってる。

言葉の定義や概念の話はどうでもいいのです。
先ほども書いたように、「モーダルな」動作に入ろうとする時を
確実に検出する方法が欲しいだけなのですが・・・

947 名前:デフォルトの名無しさん :04/02/22 01:03
フィルタドライバ作れば?

948 名前:デフォルトの名無しさん :04/02/22 01:06
>>945
こんな些細な問題でスレッドは使いたくないのですが・・・

949 名前:デフォルトの名無しさん :04/02/22 01:18
とかいいつつこのスレッドはもうすぐ終わりだよ

950 名前:デフォルトの名無しさん :04/02/22 01:23
>>948
些細な問題なら放置しとけば?

951 名前:デフォルトの名無しさん :04/02/22 01:30
>>946
> 先ほども書いたように、「モーダルな」動作に入ろうとする時を
> 確実に検出する方法が欲しいだけなのですが・・・

MFC スレならともかく、このスレ的には ALT キーで「モーダルな」動作に入るのは「あんたのプログラムの動作」だよ。

952 名前:デフォルトの名無しさん :04/02/22 01:51
やはりブロックしたくないならUIスレッドとロボット制御スレッドを分離した方が…

953 名前:デフォルトの名無しさん :04/02/22 01:51
>>926
そうか、SetMapModeを設定したものを出力した時に、
縮小しているように見えたのは、DPIの設定が出来ていたということでしたか。
GetDeviceCaps(memhdc,LOGPIXELSX)が96のままだったので見過ごしていました。
納得しました。ありがとうございます。

ちなみに、この返り値96を変更するAPIはあるんでしょうか?


954 名前:デフォルトの名無しさん :04/02/22 01:53
>>951
>「あんたのプログラムの動作」だよ。

それは要するに、メッセージや呼び出す API 一つ一つに常に注意して、
これ以降の処理はモーダルな動作に入るかどうかに気を配りながら
コーディングするしかない、という意味と解釈して良い訳ですか?

その点数が少ないのなら、そのような方針でも良いのですが、
もしそのような箇所が何十種類、何百種類も出てくると手に
負えなくなるのが目に見えるので。

本来、最初にスレッドを使うことを考えたんですが、それをやらずに
済むのならやりたくないので、もっと楽な方法がないか尋ねたんですが・・・


955 名前:デフォルトの名無しさん :04/02/22 01:59
スレッドを使うことに抵抗があること自体、あまりにもスキル不足。
それはポインタがわからなくて関数化することに抵抗があるのと同じくらいの論外だ。

956 名前:デフォルトの名無しさん :04/02/22 02:01
>>953
できない、システム依存。
画面の設定の詳細から変更した値が返る

957 名前:デフォルトの名無しさん :04/02/22 02:10
>>955
スキル云々より移植性の問題が大きいのですが。
(シングルタスクの実行環境も考慮して実装している為)
元々言語自体に組み込まれているのなら
私も使う事に何のためらいもないのですが。

958 名前:デフォルトの名無しさん :04/02/22 02:17
boostのthreads使えばいいじゃないか

959 名前:デフォルトの名無しさん :04/02/22 02:22
>>957
・シングルタスクの実行環境
・モーダルな処理がある
・定期的な処理をする必要がある

普通に考えたら、何かあきらめないと無理だと思う。

960 名前:デフォルトの名無しさん :04/02/22 02:23
>>957
ハァ? スレ違いか???????????????????????????????????


961 名前:デフォルトの名無しさん :04/02/22 02:24
>(シングルタスクの実行環境も考慮して実装している為)

意味不明。

962 名前:デフォルトの名無しさん :04/02/22 02:26
タイマーでも使えばいいんじゃねーの?

963 名前:デフォルトの名無しさん :04/02/22 02:46
>>961
DOS とかも視野に入れてるってことだろ。

964 名前:デフォルトの名無しさん :04/02/22 02:54
だったらなおさらスレッドにしたほうが良いだろ
イベント式じゃないOSだったらどうするんだよ

965 名前:デフォルトの名無しさん :04/02/22 02:54
>>956
そうでしたか。ありがとうございました。

966 名前:デフォルトの名無しさん :04/02/22 02:55
>>963
あぁ、明らかなスレ違いってことか。

967 名前:デフォルトの名無しさん :04/02/22 02:59
擬似スレッドを自分で実装して、使うしかないな。
がんばれ。

968 名前:デフォルトの名無しさん :04/02/22 08:21
>>963
Win32sとか

969 名前:高校生 :04/02/22 10:31
SHBrowseForFolder()をつかってディレクトリを選択させようとしています。
この関数の結果を絶対パスにする方法はありませんか?

GetOpenFileName()なら、カレントディレクトリが変わっているので、
GetFullPathName()が使えたのですが、それもできません。

970 名前:デフォルトの名無しさん :04/02/22 11:35
スレッドもまともに扱えないような人が作ったものを、
様様なOSで提供したとしても誰も欲しがらない。
そもそもシングルタスクって、いったい何のOSをターゲットにしてるんだ。

どうしてもマルチプラットフォームにしたいなら、それぞれで組め。
とりあえずWindowsではスレッドだ。それ以外に無い。

971 名前:デフォルトの名無しさん :04/02/22 12:08
Buttonを押すメッセージを送りたいのですが、うまくいきません。
SendMessage(hwndBtn, WM_LBUTTONDOWN, 0, 0);
SendMessage(hwndBtn, WM_LBUTTONUP, 0, 0);
なにがいけないのでしょうか?

972 名前:971 :04/02/22 12:16
hwndBtnはEnumChildWindowsを使って取得しました。
GetWindowTextを使ってキャプションを見る限りは正しく
取得できていると思います。

973 名前:デフォルトの名無しさん :04/02/22 12:28
>>969
SHBrowseForFolder()の返り血をSHGetPathFromIDList()で処理する。


974 名前:高校生 :04/02/22 13:06
>>973
thanks you!

ところで、MSDNによると、
>The calling application is responsible for freeing the returned PIDL by using the Shell allocator's IMalloc::Free method.

これを呼び出したアプリケーションは、戻り値のPIDLを、シェルアロケーターのIMalloc::Freeメソッドを用いて解放する責任を負う。

とありますが、こんなかんじですか?

  LPITEMIDLIST p;
  p = SHBrowseForFolder(...)
//必要な処理
  IMalloc::Free(p);

もし解放しない場合は、メモリリークしますか?

975 名前:デフォルトの名無しさん :04/02/22 13:32
>>974
::CoTaskMemFree()でどうぞ

976 名前:デフォルトの名無しさん :04/02/22 14:20
タスクトレイに常駐させる場合、
アイコンでなく文字列を表示させることはできますか?

ツールチップではなく、
「日付と時刻の調整」のように、
トレイに文字列を表示させたいのです。


977 名前:デフォルトの名無しさん :04/02/22 14:21
文字をビットマップ化してください

978 名前:デフォルトの名無しさん :04/02/22 15:13
SetMenuを実行するとRuntimeError216が発生して悩んでいます。
解決方法のご教授お願いします。

関連するソースは以下の通りです(Delphi 6 personal)。
hM := CreateMenu;
AppendMenu(hM,MF_STRING,IDM_FILE,'&File');
SetMenu(FHandle,hM);
※FHandleはクラスメンバでWndProcでウィンドウハンドルは代入済みです。

リソースで記述したメニューでも、
ウィンドウクラス登録時にwc.lpszMenuNameで設定した場合は、問題ないのですが、
WM_CREATEでLoadMenu、SetMenuで登録しようとするとやはりRuntimeError216が発生してしまいます。


979 名前:976 :04/02/22 15:55
>>977
そうします

980 名前:デフォルトの名無しさん :04/02/22 16:04
>>978
delphi刷れ池

981 名前:デフォルトの名無しさん :04/02/22 16:10
>>978
CreateWindowで設定しないのはどうして?

982 名前:デフォルトの名無しさん :04/02/22 16:34
CreateProcessで外部のコンソールアプリを実行して、その標準出力の内容を
ログとして出力したいのですが、実現方法(標準出力の取り込み方法)をご教授
願えないでしょうか。

983 名前:デフォルトの名無しさん :04/02/22 16:56
パイプ

984 名前:デフォルトの名無しさん :04/02/22 17:10
>>976
TClockのソースでも参考にすれ。

985 名前:978 :04/02/22 17:29
>>980
C++でも起こるんですけど(^^;
(この場合はcpu100%に...)
Borland製(DelphiとBCC5.5.1)だから?

>>981
ウィンドウクラスで設定しておけば、問題ないのですが、
RuntimeError216が出る理由が解かるのでは?と思って聞きました。


986 名前:デフォルトの名無しさん :04/02/22 21:41
>971
使ったこと無いけど"BM_CLICK"?

987 名前:デフォルトの名無しさん :04/02/22 22:52
やっとバグがとれたよ・・・。この喜びをみんなにも分かってほしい・・・。

988 名前:デフォルトの名無しさん :04/02/22 22:53
じゃ、コードどっかにうpして。

989 名前:デフォルトの名無しさん :04/02/22 23:15
>>982
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q190351

990 名前:デフォルトの名無しさん :04/02/23 00:04
>>989
ありがとうございます。
パイプを使うのですね。試してみます。

991 名前:デフォルトの名無しさん :04/02/23 00:12
>>990
前スレか、前前スレあたりでコンソールからのパイプについては
私が質問&研究しまくった。
ログあさってくれ。

結局他人のツールは、パイプされるのを意識して作られた(flushが所々で行われている)ツール以外は、
リアルタイム取得が無理であきらめた。

992 名前:デフォルトの名無しさん :04/02/23 00:35
>リアルタイム取得が無理であきらめた。
あきらめるもなにも受け取ったバッファをコールバックで
通知するようなインターフェースにしとけばいいだけの話では。

993 名前:デフォルトの名無しさん :04/02/23 01:11
いや、多分そういうことじゃなくてバッファリングの話じゃない?
>>991は無効にできるのを知らなかったのだと思われ。

994 名前:デフォルトの名無しさん :04/02/23 01:16
ライブラリレベルでのバッファリングは親アプリから制御できないだろ

995 名前:デフォルトの名無しさん :04/02/23 01:24
新スレ立った?

996 名前:デフォルトの名無しさん :04/02/23 01:30
>>985
ウィンドウクラスで設定しなくても、CreateWindowでダミーのメニューを与えておき、
あとで置き換えれば上手く行きませんか?
CreateWindowで与えないと、ウィンドウクラスのメニューしか使えなくなる気がします。

997 名前:デフォルトの名無しさん :04/02/23 02:09
新スレ、誰か頼む。

998 名前:デフォルトの名無しさん :04/02/23 02:19
次スレ立てますた・・・。

http://pc.2ch.net/test/read.cgi/prog/1077470292/

999 名前:デフォルトの名無しさん :04/02/23 02:21
999

1000 名前:たねむら :04/02/23 02:21
1000とはぞっとしない由、本来なら担当者を怒鳴りつけるところだが、
もそもそと苦言を呈しておく。

新スレ http://pc2.2ch.net/test/read.cgi/tech/1077470361/


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.