>>530 COMポートになりすまさない内蔵ISDNとか使うとRASDT_Isdnになるよ
532 :
デフォルトの名無しさん :02/09/02 12:45
文法的な問題で詰まってるのですが、 これはどう解釈したらいいのでしょうか? int test() { return ::GetLastError() != ERROR_SUCCESS; } ::GetLastError() != ERROR_SUCCESS;が 真なら1を返し、そうでなければ0を返すというだけのものでしょうか? test()がintの戻り値を返すようにサンプルではなっているので 気になっています。 intなのに1 or 0しか返さないのでしょうか? それともなんらかの場合、GetLastError()の値を返したりしますか?
>>532 MSDNの「return」見てみな。
ちなみに「真なら1」とは限らない。
>ちなみに「真なら1」とは限らない。 条件演算子は真なら1、偽なら0を返す。 これは言語で規定されている。 スレ違いだけどな。
>intなのに1 or 0しか返さないのでしょうか? それをいったら BOOL 自体 int だしな windef.h 見てみ
>533 見てみましたが、特にこの問題と関係ないように思えたのですが。。 >535 それはわかってますが、 0 or 1しか返さない仕様の関数に int型の戻り値を要求するのがおかしいな、と思いまして。 0 or 1ならBOOL型で十分じゃないかと。 >534 つまり GetLastError() != ERROR_SUCCESS の条件式が先に 0 or 1に評価され、 それがreturn 0 or 1に なるという流れでよろしいでしょうか? つまり、 GetLastError() != ERROR_SUCCESS は条件式なので、0or1の値しかなりえないと。 あってます?
>>535 bool型ならじゃなくて、条件演算子ならってかいてあるじゃん
まぁ、規定されてるのはC++だけだが。
答え:そのソースはCで書かれている。
C++ならbool型のtrue/falseになって Cならint型の1/0になる。 BOOLは単にintをtypedefしたもの。 で、API関係の解説はCでも使えるように大抵Cで書いてあるんじゃないのかな。
540 :
デフォルトの名無しさん :02/09/02 20:29
くだらないかもしれないけど、質問です。 あるウインドウハンドルの 親ウインドウのハンドルを取得するAPIってありますでしょうか? 良かったら教えてください。
541 :
デフォルトの名無しさん :02/09/02 20:30
なんか日本語おかしくてすみません。 あるウインドウの親ウインドウのハンドルを そのウインドウのハンドルから取得できるようなAPIは無いでしょうか ですね。 よろしくお願いします。
543 :
デフォルトの名無しさん :02/09/02 20:39
これはまた・・そのまんまな名前ですね ありがとうございました。
Octal 3State Buffer君よ、探し方を聞いた方がいいと思うぞ
545 :
bloom :02/09/02 21:34
546 :
デフォルトの名無しさん :02/09/03 16:20
「プラットフォーム SDK: デバッグ / エラーに関する処理」 にある APIについてなんですが、 >対応情報 > Windows NT/2000:Windows NT 3.1 以降 > Windows 95/98:Windows 95 以降。Windows 95 用の再配布可能なファイルとして利用可能。 > Windows CE:対応していません 「再配布可能なファイルとして利用可能」とは、どういうことですか?? この APIをコールする実行ファイルを、一般に配布して良いということですか?
>>546 IE5に含まれるとか、そんな意味だろ。この場合、IE5は再配布可能だから、Win95
でも利用可能ということになる。
よく、対応情報の回りを読んでみそ。
>>547 MakeSureDirectoryPathExistsとか。
...って、MSDN英語版では、どう記載されてるのかと思って見てみたら
>Requirements
> Windows NT/2000/XP: Included in Windows 2000 and later.
> Redistributable: Requires DbgHelp.dll 5.0 or later on Windows NT 4.0 and Windows 95/98/Me.
こういうことか。すなわち、DbgHelp.dllが必要で、この DLLを再配布して良いと。
550 :
デフォルトの名無しさん :02/09/03 21:56
NT4/98で SHCreateShellFolderView(Ex) 相当の処理は自前でIShellView書く以外に無いのでしょうか?
>>550 あれは「2000/XP上で」Microsoftのミドルウェアが使っているAPIを
公開した、という名目なのでそれ以前でもひそかに使える可能性はある。
でもIE5が必要とか。
NtCreateFileでファイルの初期サイズを指定すると 連続したクラスタに割り当てられる可能性が高くなったりしますか?
553 :
YahooBB237224170.bbtec.net :02/09/05 00:46
確かこのへんのスレだったと思うが「俺ならその(実行中の)プログラムに もぐりこんで**を調べる」というようなのを読んだ記憶があるんだが, どうやればそんなことが出来るんでしょうか.
>553 んなことより、あんたの 名前欄はなんなんだ??
556 :
YahooBB237224170.bbtec.net :02/09/05 01:43
>名前欄はなんなんだ?? こっちが聞きたいよ.fusianasan としたらこれが出た.(今回も) もちろんプロバイダはYBBですが,板の仕様? それより実行中の別プログラムの何をフックするんですか?APIがある?
>556 皆を代表して聞くが なんで 「fusianasan」と入れる?
559 :
fusianasa :02/09/05 02:30
? なんか特別な意味がある? どっかでみて適当に書いただけだが. こんかいは fusianasa と書いてみました. window handle を入手するんですね.どうも. たぶんまた聞きますのでよろしく.
560 :
デフォルトの名無しさん :02/09/05 03:21
自分が管理してるデータがあって データの一部をリストビューで表示させてるときって データをどうやってもつんですか? 自分のデータを保持してると リストビューにも同じ内容のデータが出来て メモリがもったいない気がする
>>561 仮想リストビュー(オーナーデータ)でがんがれ。
564 :
デフォルトの名無しさん :02/09/05 09:33
SDKのファイル・フォルダセキュリティ設定に関して質問があります。 AddAccessAllowedAceEx関数を使用し継承を設定したのですが、設定したフォルダの中に新しいフォルダを作成すると「継承元なし」のフォルダが出来てしまいます。 継承元を親フォルダに設定するにはどうしたらよいでしょうか? OSはWindowsXPで、VC++のバージョンは6.0です。
565 :
デフォルトの名無しさん :02/09/05 13:40
VB質問スレとの重複ですみません。 こちらの方が適当だと思いますので、質問し直させてください。 VB6.0、Windows2000で、OpenPrinter関数でプリンタのハンドルが取れません。 ローカルプリンタだと大丈夫なのですが、\\SERVER\PRINTERといった ネットワークプリンタだと失敗してしまいます。 ネットワークプリンタの場合、方法を変える必要があるのでしょうか?
566 :
デフォルトの名無しさん :02/09/05 15:52
それぞれがウィンドウをもつオブジェクトをクラスとして扱うために、 ウィンドウプロシージャをフレンド関数としてそのクラスにもたせています。 (メンバ関数のアドレスを取るのは望ましくないですよね?) インスタンスはたくさんあるけれどもWndProcはひとつなので、 WndProcから見るとどのインスタンスに属するメッセージなのかが区別できません。 これを解決するために、CreateWindowでインスタンスポインタ(this)をWM_CREATEに 渡してSTLのmapにhWndとthisポインタを格納し、メッセージに応答するときは hWndからthisをサーチしてインスタンスを決定する、という方法をとっています。 なんだか泥臭いので、もっといい方法はないでしょうか。 こういったことはよくありそうだと思うんですけど。
>>566 他に定番の方法としては、
・SetWindowLong でhWndにthisポインタを関連付けて置いて、
WndProcでGetWindowLongで取り出し。
・サンクを使う。つまり、thisポインタを埋め込んだマシンコードを
実行中にメモリに作ってしまって、それをWndProc替わりにする。ATLとか参照。
サンクって手抜き実装だと激しくメモリ使わない? VirtualAllocの割り当て単位がページ毎だし、 サンク作る毎にメモリ確保してたら4kずつ取られてくよね
なんでVirtualAlloc使うん?
>>569 PAGE_EXECUTE属性をつけにゃならんだろうが
>570 #include <stdio.h> int main () { unsigned char *p; unsigned char x[] = { 0xB8,0x7B,0,0,0, // mov eax,123 0xC3 // ret }; p = malloc( sizeof( x ) ); memcpy( p, x, sizeof(x) ); printf("%d\n",(*((int (*)(void))&x))()); printf("%d\n",(*((int (*)(void))&p))()); } BCC32 on WinXPで実行したけど、violation出えへんかったで。
わざわざmapなんて使わなくてもSetWindowLongのがスマートですね。 サンクですが、要するにメモリにマシン語書いておいてそこに突入させる わけですよね? そいつをWndProc代わりにするってのがよくわかりませんが・・・。 何にしても最後にはWndProc呼んでやらないといけないですよね? アセンブラはPC-98時代にぶいぶい言わしたくらいで最近はとんといじってません。
>>572 > そいつをWndProc代わりにするってのがよくわかりませんが・・・。
引数の hWnd を、アセンブラコードの部分でこっそり this とすり替えるんだよ。
>>571 通るかも知れないけど、EXECUTE属性のないメモリ上でコードを実行させるのは行儀悪いだろ
つか、ATLもそうだろ(VirtualAlloc使ってない) 文句があるなら、Microsoftにいってくれ。
>>574 デフォルトで実行属性がつくから、問題ない。
そんなの処理系・環境依存だろって意見はあるかも知れんが、そもそも
VirtualAlloc とか言ってる時点で Win32 環境限定の話だしさ。
>>572 おおよそのところ
memcpy( buf,
//---------------------------------
mov dword ptr [esp+4] this
jmp WndProc - (buf + α)
を意味するコード
//---------------------------------
, size
);
SetWindowLong( GWL_WNDPROC, buf );
こんな感じにすると、第一引数としてhWndが入ってたはずの部分に
thisポインタの値が入った状態でWndProc関数に飛ぶので、
あとはテケトーに。
>デフォルトで実行属性がつくから、問題ない。 こんなことどこに書いてある?
なるほど、理解できました。 行儀悪いのは大好きなのですが、hWndとthisをすり替えるってのが ちょっとキモチワルイです。 ひとつ思ったんですが、これって誰かにサブクラス化されたらえらいことになりますね・・・。
>>579 ecxにthisを入れてjmpすれば、
少なくともvcでは正常にthisが使えるよ。
>>578 公式にドキュメント化されてるかは分からないなぁ。
ただ、俺は少なくともプロセスヒープは「read/write/execute可能」という前提で
プログラミングして(いちいち GetProcessHeap && VirtualProtect なんて
やってない)。MS が出してるコードも、そうなってるしさ。
>>579 > ひとつ思ったんですが、これって誰かにサブクラス化されたらえらいことになりますね・・・。
なんで?
質問です。 特殊キーの状態はGetKeyStateで取得できるのですが、 それ以外のキーの状態を取得するAPIはありませんか?
sageてしまいますた。
それ以外のキーもGetKeyStateで取得出来るけど・・・?
え、そうなんですか? GetKeyboardState()で特殊キーも取得できちゃったんで、 全部コレにしてしまいました。 その、GetKeyState()で、例えばzキーやxキーを取得できるとして、 速度的にはどっちが早いんですか?
安心しろ、人間がキーを打つ速度はそれよりはるかに遅い。
Sleep() と GetMessage() を、 ほぼ同時に実行したいのですが、どうしたらいいですか? いつもはPeekMessageを使ってるプログラムで暇な時にSleepしてると フリーズしたみたいになるので、その間だけGetMessageを使いたいんですが。 GetMessageを呼んだ時に送られるメッセージとかってありますか?
Sleep(0)とか
>>589 えと、ゲームを作ってて、俺マシンはK6-2の500MHzなんですよ。
んで、1フレームにイロイロ処理をしてると秒間10フレーム逝くか逝かないかで。
なんで、なるべく時間をかけたくないワケです。
>>590 電波ですか?
>GetMessageを呼んだ時に送られるメッセージとかってありますか?
これがあったら無限ループ
>>591 入力くらいスレッド分けろよ。
WM_KEYDOWNが来た時点でイベント起こしたりSwitchToFiberしたり汁。
そもそも、ループ毎に検出しなきゃならないのはジョイスティックくらいで、
キーボードなんかはイベントで十分。
>>593 アクションゲーなんですが、スレッド使うんですか? それはちょっと。
595 :
デフォルトの名無しさん :02/09/05 23:47
>>590 500mm秒ほど寝かせてPeakMessage使え。
スレッドの切り替え時間が十数mm秒だからほかへの影響もほとんどないし、
反応が悪くなることもない。
>>590 MsgWaitForMultipleObjects
>>595 500mm秒って50cm秒でしょうか?
ってどのくらいの長さですか?
50cm秒って初めて聞いたなw 500mm秒も初めて聞いたけど。
多分
>>595 は500_秒と表現したかったんだろうけど、
ホントは500マイクロ秒と言いたかったのではないと予測。
自作コントロールのサンプルみたいのありませんか? 親ウインドウにメッセージを返すのに、どの変数を どういう風に設定すれば良いのかがわからないのです。
> 親ウインドウにメッセージを返すのに 何のメッセージを返すの? 自前で処理したいメッセージなら処理してリターン、 それ以外はDefWindowProcにそのまま渡せばいいんだけど。
601 :
デフォルトの名無しさん :02/09/06 01:49
シャットダウン、ログオフなどを WM_QUERYENDSESSION で検出したのはいいのですが、 lParamがシャットダウンも再起動も 共に0になってしまいます。 見分ける方法はないでしょうか? WinXP、VC.NETです。
PeakMessage萌え
>>600 自作のエディットコントロールで、NotifyメッセージをEDIT互換にしたいとかじゃないの?
>604 見分ける方法はあるのですか? それともないのですか?
>>605 何をやりたいのか、もう少し具体的に書いてみれば? 代案が出てくるかも
知れんぞ。
>606 別スレですこし話したのですが、 ファイルを定期的にバックアップするツールを作っています。 その機能の一部に 終了時、バックアップをとる というのがあるんですが、 これを実装するためです。 別スレでは、シャットダウン時は 重い作業厳禁、といわれたのですが、 ファイルのコピーなので仕方ないかな、と思って開発進めてます。 シャットダウン時にコピーすると応答が無い、という ダイアログが出てしまいます。 ですから WM QUERYENDSESSIONでFALSEを返し システムからのシャットダウン要求を中断、 WM ENDSESSION中側でファイルの処理、 その後ExitWindowsExでシャットダウン とするように動かしたいのですが、 一度止めて、ExitWindowsExする時に、 シャットダウンならシャットダウン、 リブートならリブート、と引数を変化させる必要が あり、どうしても必要な情報と思ってます。
>>607 そんな感じって...自分でまともに説明もできんのなら
標準のEditコントロールでも使っとけ。
通知したい時点で
SendMessage(GetParent(hwnd),
WM_COMMAND,
MAKEWPARAM(GetDlgCtrlID(hwnd), EN_CHANGE),
(LPARAM)hwnd);
のような感じで呼び出せばいい。
>>608 MFCスレで、そのソリューションを提示した者だ。
if ( lParam & ENDSESSION_LOGOFF )
でちゃんと区別つけられたよ(Win2000)。
>610 すみません、毎度毎度ご迷惑おかけします。 あたりです。 そんな定数あるとは知りませんでした。 winusuer.h内のしかも ExitWindowsExの近くに #define EWX_LOGOFF 0 #define EWX_SHUTDOWN 0x00000001 #define EWX_REBOOT 0x00000002 #define EWX_FORCE 0x00000004 #define EWX_POWEROFF 0x00000008 #if(_WIN32_WINNT >= 0x0500) #define EWX_FORCEIFHUNG 0x00000010 とあり、他のも区別できそうです。 .hへ定数を調べにいくという考えは持ってませんでした。 次から気をつけたいと思います。 ありがとうございました。
>611 勘違いしてました。 これはExitWindowsExの引数に使う定数ですね。 >610さんのおっしゃられてる方法だと、 確かにログオフは検出されますが、 シャットダウンか再起動かは判別できないようです。 簡易的にはWM_QUERYENDSESSIONの lParamが1か0かで同じ判断ができるようです。 喜びのあまり、てっきり EWX_SHUTDOWNをENDSESSION_SHUTDOWNと 勘違いしていたようです、すみません。 ENDSESSION_LOGOFFもあるならと ENDSESSION_SHUTDOWN なども探してみましたがどうやらログオフしかないようです。 シャットダウンと再起動を見分けることはできないのでしょうか?
WIN32アプリをWM_CLOSEにより終了させる際に受け取るメッセージって WM_CLOSE -> WM_DESTROY -> WM_QUIT の順番でいいんでしょうか? WM_DESTROYでオブジェクトの解法とかしてるんですけど なんかの解法忘れがあるっぽくて、終了後CPU占有率が70%くらいになってしまう...
>>612 シャットダウンか再起動かの判別...オラは、わがんね。
メッセージの拾い忘れでした はずかちー・・・
WM_DESTROYの後にWM_NCDESTROYが来るよ・・・(ぼそっ)
と思ったらOSがイカレてるだけでした・・・ イカレたOSでコンパイルしたexeって やっぱイカレてるのかな
618 :
デフォルトの名無しさん :02/09/06 22:13
自分自身のウインドウハンドルを取得するいい方法はないっすか? GetForegroundWindow を使えば、取得できないことはないですが ちょっと違うんです。 あとは、GetDesktopWindow から下がっていくぐらいしかわからなかったっす。 関数の引数に与えてやれる情報は、何もないっす。 具体的には、DLL からその呼び出されているウインドウのハンドル を取得したいのです。 DLLに直接ウィンドウハンドルを渡してやるとかは、ナシっす。 それをやりたくないのでありまして・・・。
自分自身ってなに? WndProcの第一引数にハンドルが入ってくるが
http://www.torikyo.ed.jp/torie-h/ これは、田舎のひなびた小さな学校のHPを100万ヒットの
人気HPにしてあげようという運動です。現在のターゲット校は上記です。
多くの皆さんクリックしてあげて下さい。
HPに飛んだら、2,3回更新していただくと、もっとありがたいです。
どんどんコピペして他の板にまいてください。
621 :
bloom :02/09/06 22:32
>>618 どのウインドウのWindowProc中か知りたいということ?
スタックをさかのぼるしか方法ないと思うが
自分自身ってのがわかりにくかったっすね。すまんす。 実行しているプログラム=プロセスのことで、あってるのかな。 具体的にいいますと、a.exe ってのが、x.dll を使ってるとします。 このとき、a.exeが、自分自身ってことです。 そして、やりたいことというのは、x.dll からa.exe のウィンドウハンドルを 取得したいのです。 もしかして、DllMainの第一引数でOK??? もうちょっと調べてみます〜。
>>623 一つのプロセスは複数のウインドウを所有できることを忘れてないか?
1プロセス1ウィンドウではない。 まずこれを理解しよう。 コマンドラインで使うようなプログラムはウインドウを持たないし、 Exploror等は1プロセスでいくつものウインドウを持ってる。
>>623 まぁ、プロセスが持つウィンドウを全部調べたいと仮定して、EnumWindows & GetWindowThreadProcessId が妥当なところだろう。
DllMainの第一引数を使って、やってやるとやりたいことが なんとかできあたみたいです。 アドバイス役にたちました。どもッス。
だれもDllMainの第一引数なんて言ってないと思うが
ツールバーを作成して、ビットマップがボタンに張り付いてくれたのはいいんですが、 これってシステムの背景色で透過させることはできないのでしょうか? システム背景色は設定で変えられるので、ビットマップの周辺に灰色を塗っただけじゃ 浮いてしまう可能性がありますし、ダサいので・・・。 それと、メディアプレーヤ6.4のツールバーのようにツールバーを下の方に移動したいのですが、 SetWindowPosを受け付けてくれません。完全に下にへばりつかせるか、上にへばりつかせるかしか できないようです。これもなんとかならないでしょうか。
age
>>629 「bitblt 透過」でgoogleしる。
>>631 マスクを生成して自前で透過処理を行え、ということでしょうか?
0番目のパレットの色が透過になるんじゃないの
すんません、フォトショップがはき出したbmpがダメダメでした・・・。
プリンタに LintTo() で線を引くとえらく汚いのですが、 これは漏れのプリンタ(MJ-900C)がボロいからでしょうか?
CreateWindowの最後の引数はなに?
例外c0000026Hってなに? 3回も出やがった
>637 何を聞きたいのかよくわかりません。 検索エンジンにでも聞いてください。
一応補足しとくと、Window開いてDirectX作るだけのWIN32アプリ Cライクにベタ打ちしてる間は動いてたけど DirectXの初期化とかをまとめてクラス化してったら出るようになった んだけど、なぜか初期化の前で出る わけわかめ
コード出せ
642 :
デフォルトの名無しさん :02/09/07 03:03
【 SetFilePointer 】 >For example, to move in the range from 2 gigabytes to 4 gigabytes set >the contents of lpDistanceToMoveHigh to zero, or ・・・ ^^^^^^ なんで 0 なんですか?1なら納得なんですが... nSize = (nSizeHigh * (MAXDWORD+1)) + nSizeLow ですよね???
>>642 SetFilePointerのリファレンスは読んでないけど、それを見る限り間違ってないように思うけど?
2G〜4Gなら、32ビットに収まる範囲だろ?上位DWORDはゼロでいいんじゃないの?
4G〜8Gが、上位DWORD=1になるんじゃない?
符号拡張だから。 サンプル通りLARGE_INTEGER使えって事だ
>>643 DWORD SetFilePointer(
HANDLE hFile, // ファイルのハンドル
LONG lDistanceToMove, // ポインタを移動するべきバイト数(下位32ビット)
PLONG lpDistanceToMoveHigh, // ポインタを移動するべきバイト数(上位32ビット)
DWORD dwMoveMethod // 開始点
);
確かにそうなんですが、下位32ビット lDistanceToMove は符号付って
書いてあるんです...もしかして、lpDistanceToMoveHigh が
Non-NULLのときは、lDistanceToMoveは符号無しとして扱われるのかな?
//実験すればすぐ分かりそうなもんですが...
今カキコしてる環境では実験できないもんで(;´Д`)
> もしかして、lpDistanceToMoveHigh が > Non-NULLのときは、lDistanceToMoveは符号無しとして扱われるのかな? そりゃそうでしょ。両方が符号ビット持ってどうするのよ。
>>645 644じゃないけど
32ビットで符号つきならMSBと31ビットだけど
64ビットなら符号を上位32ビットに移せば下位32ビットの
MSBは符号を示す必要がなくなるじゃん。
下位32ビットで4GBまで表現できるわけでしょ。
649 :
デフォルトの名無しさん :02/09/07 03:34
CreateWindow(....... LPARAM lParam) この最後の引数はなににつかうの?
>>649 ウィンドウプロシージャに WM_CREATE が送られるとき、その lParam に渡すために使われます。
>>649 MSDN参照。
ウィンドウを生成したときに WM_CREAT メッセージが
WinProcに飛んでくるがそのときに lParam 値に設定される。
使い方はお好きなようにどうぞ。
さっきからかぶってますな。ネマツ。
>647-648 こんな夜更けにどうも。勉強になりますた。 >For example, to move in the range from [0] to 4 gigabytes set >the contents of lpDistanceToMoveHigh to zero, or ・・・ こう書いてくれれば...
>>653 from 2 to 4 で問題ない。その少し前から文脈をよく読め。
自己レス
>>636 ひょっとして
CreatePen(PS_SOLID, 0, RGB(204, 204, 204))
とかで作ったペンで線書いても綺麗に出ないんでしょうか?
MSDN にそれっぽいことが。。。
中間色の直線を綺麗に出す方法どなたか教えてください。
>>655 画面の色数がハイカラーやフルカラーなら普通に問題なく出るよ。
256色の場合はパレットを操らないとだめ・・・
って、プリンタか。意味不明のレスしたね。ごめ。
>>655 カラープリンタで1ドットの太さの線を描いてもディザリングの
処理のせいで思ったよりで綺麗に出ないんじゃないの
>>655 中間色がそのまま出る、昇華型プリンタを買ってくる。
660 :
デフォルトの名無しさん :02/09/07 18:38
デスクトップやアプリ上でのマウス操作(DownやUp、ドラッグなど) それらに渡さないでを全て引き受けるような方法ありませんか?
SetWindowsHookEx の WH_MOUSE とか、どう?
>660 メッセージをフックする。 >それらに渡さないでを そんなことしたらえらいことになるぞw
>>661 フックというものですね、少し調べてみます。
>>662 >>それらに渡さないでを
>そんなことしたらえらいことになるぞw
そうなんですけどね、これができないと困るんですw
画面上でペイントみたいにお絵かきしたいんですが(お絵かきが最終目的ではありませんが・・・)
マウスのイベントをデスクトップや開いてるアプリに取られるとうまくいかないと思ったので。
デスクトップ上に落書きしたいんであれば、透明なウインドウを最大化すればいいんじゃね〜の。 #define STRICT #include<windows.h> LRESULT CALLBACK WindowProc(HWND hWnd,UINT iMes,WPARAM wPrm,LPARAM lPrm) { switch(iMes){ case WM_DESTROY: PostQuitMessage(0); break; case WM_MOUSEMOVE: if(wPrm & MK_LBUTTON){ HDC hDC = GetDC(hWnd); if(hDC){ int y = HIWORD(lPrm); int x = LOWORD(lPrm); HBRUSH hb=SelectObject(hDC,CreateSolidBrush(RGB(255,0,0))); Ellipse(hDC,x-8,y-8,x+8,y+8); DeleteObject(SelectObject(hDC,hb)); ReleaseDC(hWnd,hDC); } } break; } return DefWindowProc(hWnd,iMes,wPrm,lPrm); } --- 続きます ---
--- 続き --- int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR CmdLine,int CmdShow) { HWND hWnd; MSG msg; WNDCLASS wc; memset(&wc,0,sizeof(wc)); wc.lpfnWndProc=WindowProc; wc.hInstance=hInstance; wc.hCursor=LoadCursor(NULL,IDC_ARROW); wc.lpszClassName="Hello"; if(! RegisterClass(&wc))return 0; hWnd=CreateWindow("Hello","Hello",WS_TILEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL,NULL,hInstance,0); if(! hWnd)return 0; ShowWindow(hWnd,SW_SHOWMAXIMIZED); while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);} return msg.wParam; }
>>664 なるほど、そういう手もありましたか^^;
結構お手軽な方法ですね。
667 :
デフォルトの名無しさん :02/09/07 21:23
斜め45度に傾いた細長のペンを作りたいのですが、出来ますか? LOGBRUSHでDIBペンやHATCHペンではダメでした。
> 斜め45度に傾いた細長のペン 意味不明
ペンの形ってこと? 斜め45度に傾いた直線型のペンを作りたいとか?
670 :
デフォルトの名無しさん :02/09/08 01:58
現在ソースの無い DLL を解析しているのですが、特定 DLL 内への呼び出しを 全てフックするなり、ログを取るなりできるデバッガ/ツールを御存知ないで しょうか。 # いまのところ ollydbg と言うデバッガを使っているものの、DLL 内の # エントリポイント全てにブレークポイントを設定するのは困難なので、 # もう少しいいデバッガ/ツールが欲しくなっています。
671 :
デフォルトの名無しさん :02/09/08 02:02
672 :
グローバルIPの取得方法 :02/09/08 02:31
Web上の自作CGIや確認君から読み込む方法と Ipconfigで書き出したテキストから読み込む方法と 試したのですが、あまりいい方法だと思いません。 みなさんどうしてます?
ipconfigはグローバルIP吐かないと思うが
>>673 OCNとか犀ネットの専用線なら吐く。
吐かないのはADSLでマスカレードかかってる場合。
>>673 漏れは672じゃないが、
モデム直結なら、グローバルIPを吐くんじゃないの?
当方、ルータユーザーだから分からんが。
ホスト名は環境変数から引いてそれを下のようにしてDNSを引く。 なお、ADSLのようにグローバルIPを変換しているような鯖は、 グローバルアドレスは実際の鯖のIPとは別なので、 あらかじめ外向けのホスト名を自分でセットしておく。 int setinetaddrbyname(struct sockaddr_in &addr, const char *s) { struct hostent *hp; if ((hp = gethostbyname(s)) == NULL) { // 引けない return -1; } else if (hp->h_addrtype != AF_INET) { // IPv6/NetWare? return -1; } else { addr.sin_addr.S_un.S_un_b.s_b1 = hp->h_addr_list[0][0]; addr.sin_addr.S_un.S_un_b.s_b2 = hp->h_addr_list[0][1]; addr.sin_addr.S_un.S_un_b.s_b3 = hp->h_addr_list[0][2]; addr.sin_addr.S_un.S_un_b.s_b4 = hp->h_addr_list[0][3]; return 0; } }
677 :
使えねーPaintDesktop :02/09/08 03:41
表示中のDesktop画像を取得したいのですが,PaintDeskTopでは ActivDesktop のときに取れません. 方法はあります?
678 :
使えねーPaintDesktop :02/09/08 03:50
↑あ,デスクトップの背景です.アイコンやウィンドウのない原画です.
>>673 そうなんですよねぇ
うちはADSLモデム直なのでipconfigでもいいのですが
環境によって使えないのはどうかと思いまして
>>676 非常に申し訳ないのですが理解不能です^^;
676さんの書き込みをヒントになんとか頑張ってみます。
分からなかったときはまた書き込むと思いますが
そのときはよろしくお願いします。
ありがとうございましたー
680 :
デフォルトの名無しさん :02/09/08 13:26
>>668 >>669 >斜め45度に傾いた直線型のペンを作りたいとか?
そうです、ペンの形が45度傾いた物です、説明不足でした。
LineToで線を引いたときに、傾きと同じ角度の線をひくと細く、
傾きと垂直な方向に線を引くと太くなるようなペンを作りたいのです。
落書き機能を実現するためで、ペンの形を色々変えたいのですが、
丸と四角はPS_ENDCAP_ROUNDとかで実現できたのですが、斜めに傾いた
ものはつくれませんでした。
/ ←こういうやつ? ◆ 右下に引きずるとこうなって / 右上に引きずるとこうなるってやつだよな? /
682 :
デフォルトの名無しさん :02/09/08 20:02
マウスカーソルを変更するプログラムの方法について質問したいので すが、自分の作ったプログラムのウィンドウ上ではSetCursor()API を使用するだけで可能ですが、それ以外のウィンドウではウィンドウ のシステムで設定されているカーソルになってしまいます。 どなたか、自分のプログラム以外のウィンドウ上のマウスカーソルの 変更方法を知っている方はいらっしゃいませんか。
infファイル、あれ右クリックすると[インストール]と出ますよね。 で、[インストール]するとドライバが入るわけですが、 あれってどういう機構になっているんでしょうか? なにかinfファイルを処理するコマンドに食わせているのか、 シェル?にそういう機構が組み込まれているのか。 インストーラからドライバを入れたいのだけど...。 どうしたらいいのか検討つきません。 どなたかご存知の方いらっしゃいませんか?
>>679 > うちはADSLモデム直なのでipconfigでもいいのですが
> 環境によって使えないのはどうかと思いまして
それは、しょうがない。そもそもルーター経由の場合は、ルーターのグローバル
アドレスの情報はルーターにしかないから取り様が無い。
ところで、何でグローバルアドレスを知りたいの ?
ついでに、一つのマシンに複数の IP アドレスが持てることは知ってるよね ?
>>683 > なにかinfファイルを処理するコマンドに食わせているのか、
> シェル?にそういう機構が組み込まれているのか。
explorer で関連付けされてるよ。うちのマシンだと...
C:\WINNT\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1
となっている。
686 :
デフォルトの名無しさん :02/09/08 21:22
>>681 遅レスですみません。そうです、そういうペンです。APIで設定次第で
できるようなものではないですか? PS_ENDCAP_FLATというのがあったんですが
あれはペンの角度がラインの角度と勝手に垂直になってしまうのです。
ソフトからディスプレイをオフにすることはできますか? 例えば、席をはずしたいがスタンバイはしたくない場合に 使いたいと思っています。 google などで検索してもわかりませんでした。
>>686 角度から計算して線の太さを変えてみたらどうか、と思ってみるテスト。
あるいはPolygonで平行四辺形を描くとか。
>>682 > 自分のプログラム以外のウィンドウ上のマウスカーソルの変更
勝手にされたらウザいからやめれ
>689 デスクトップキャプチャソフトとか作りたいんでないかい? ドラッグで範囲指定できるような
ドラッグ中ならマウスイベントは自分のウィンドウに飛んでくるから 何も問題ないわけだが
692 :
デフォルトの名無しさん :02/09/08 23:33
>>688 あ、そっか。普通に計算して描画させればいいですね。
なるほど、ペンを使うことばっかり考えてました、
ドラッグじゃなくてクリック→クリックで範囲指定するキャプチャソフトもあるぞ。PSPとか。
マウスカーソルも変更されてるから
>>690 の言ってるような可能性もないわけではない。
694 :
デフォルトの名無しさん :02/09/09 00:14
こんばんは。どなたか教えてください・・・ マルチディスプレイ環境で、ディスプレイを指定して (たとえばセカンダリ・ディスプレイに)Windowを 作るにはどうすればいいのでしょうか・・・ たとえば1024*768のディスプレイが2つ左右に並んでいる場合、 createWindowの引数でWindowの位置を(1300,200)とかに すれば一応右側のディスプレイにWindowを作ることは出来ますが、 これだとディスプレイが上下にある場合に対応できない、等の 問題が生じてしまいます。必ずセカンダリディスプレイの中央に Windowを生成したい、というときにはどうすればいいのでしょう??
>>694 EnumDisplayMonitors/GetMonitorInfo (98/2000以降ゆえ注意)
あたりでセカンダリディスプレイの座標系を調べて
そこにMoveするというのはどうかなあ
やったことないので実験結果プリーズ(はぁと)
>>694 EnumDisplayMonitors/GetMonitorInfo
>>695 >>696 さっそくレスありがとうございます。
また結果が出たら報告させていただきます。
>これだとディスプレイが上下にある場合に対応できない、等の >問題が生じてしまいます。必ずセカンダリディスプレイの中央に >Windowを生成したい、というときにはどうすればいいのでしょう?? ユーザが二つのモニタを左右に配置しているか上下にしているか コードで知ることはできるのだろうか? コード上では、いつも左右に配置していると仮定するとよいのでは?
>>683 infファイルの書式についてはPlatformSDKに簡単な説明があったはず。
ただ、深くまで知ろうとすればDDKが必要。
>>687 WindowMessage、SystemCommand(詳細忘れた。MSDN探せば直ぐ見つかる)
WinMain関数が呼ばれてから破棄されるまで、 第一引数のインスタンスハンドルの値が不変であることは保証されてますか? クラスのprivateメンバに組み込もうか 必要になる度に呼び出そうか悩み中
>>700 不変というのが変数(第一引数)の値のことを言ってるのか
実際のハンドルのことを言っているのかよくわからん。
ハンドルは不変だし、
変数の方もローカルな変数である以上、
自分で書き換えるような真似をしなければ不変。
ごめん言い方まずかった・・・ というか、日本語間違えました 要はOSから割り当てられたアプリケーションのハンドルが アプリケーションが終了するまで不変かどうか知りたかっただけです ありがとう
あう・・・ >702=>700 で >701へのレスでした
wsocketについて質問です。 socketで接続しデータを読み込む際 非同期で読み込みたいのですが WSAAsyncSelec を利用するのはわかりましたが、 それ以外の方法はないのでしょうか? (ウインドウを使わずにやりたい)
iocp
iocpの銭形だ
穴cかよ
スライダーを自前で描こうと思い、サブクラス化してWM_PAINTやらERASEBKGNDやらを 書き換えたんですが、つまみをぐりぐりいじったときの描画が微妙です。 こういったことを紹介しているサイトなどはありますでしょうか?
DrawText() とかで、任意の位置でワードラップしたいときは 自前でゴリゴリ書かないとダメですか?
関数はユーザの「任意」を知ることはできませんので 自分で書くしかないのでは
>>712 いや、80文字目で、とか。。。
まぁ自分でやるのは別にいいんですけど、
そういうワードラップ用コールバックが指定できる関数ありませんでしたっけ?
>>695 >>696 >>698 ご返答ありがとうございました。
> やったことないので実験結果プリーズ(はぁと)
> ユーザが二つのモニタを左右に配置しているか上下にしているか
> コードで知ることはできるのだろうか?
> コード上では、いつも左右に配置していると仮定するとよいのでは?
こんな感じでマルチモニタの情報をもらえました。
(モニターを上下に配置したときの例)
(1つ目のディスプレイについて)
仮想モニタ上の位置(rect): (0, 0, 1600, 1024)
デバイス名: \\.\Display1\Unit0
(2つ目のディスプレイについて)
仮想モニタ上の位置(rect): (0, 1024, 1024, 1792)
デバイス名: \\.\Display1\Unit1
>>714 ちなみに一つ目が1600*1024で二つ目が1024*768だった
時の例です。
ウインドウズのAPIに ソニータイマー関数はありますか?
717 :
デフォルトの名無しさん :02/09/10 09:29
WindowsXPの一部の機種で、OSに処理を返さないプログラムが 画面に描画をしつづけると、10秒後ぐらいから描画がされないく なってしまう現象があります。(内部での処理は正しく続く) これってXPになってからの仕様なのでしょうか? ちとすれ違いスマソ
> OSに処理を返さないプログラムが画面に描画をしつづけると、 OSに処理を返さないってどういう意味よ。 GetMessageやPeekMessageを呼ばないってこと? もしそうなら、WM_PAINTの処理とは他のところで 直接描画してるってこと? > 描画がされないくなってしまう現象があります。 > (内部での処理は正しく続く) 描画がされなくなるってどういう画面になるのよ。 正しく続くって、デバイスコンテキストの取得も 描画関数の戻り値も調べてみて成功しているってこと? もっと具体的に説明しよう。
>>718 舌足らずですみません。
> GetMessageやPeekMessageを呼ばないってこと?
> もしそうなら、WM_PAINTの処理とは他のところで
そうです。
InvalidateRect(hWnd, &rc, TRUE);
UpdateWindow(hWnd);
で直接WM_PAINTを呼んでいます。
他のケースではモードレスでダイアログを立ち上げて
時間のかかる処理中で進捗状況を
SetDlgItemText(hWnd, IDM_CURRENT_STATUS, sTmp);
でループ中で書き換えています。
> 描画がされなくなるってどういう画面になるのよ。
画面が真っ白になってしまいます。
> 正しく続くって、デバイスコンテキストの取得も
戻り値は調べてなかったです。
これがおかしくなってたのかな?
ちと調べてみます。
>>719 >InvalidateRect(hWnd, &rc, TRUE);
>UpdateWindow(hWnd);
ループ中にメッセージ処理しなきゃ意味ないよね?
>>720 ん〜今までだとループに処理を戻さなくても
強制的に再描画してくれたのだが。
>>719 あ、それなら俺の環境(Win98SE)も似た現象が発生するよ。
Winを起動してからかなりの時間使った後に限ってだけど、
自前の画像ビューアとかIEとかで、大きな画像を表示させると、
描画されずにクライアント領域が全部真っ白(背景色)になる。
この時、小さい画像なら描画される。
(まるでシステムリソースが残っていないような感じ)
普通のメッセージループを使って、WM_PAINTでの応答で
BeginPaint
StretchDIBits
EndPaint
としているだけなんだけどね。
API関連の戻り値は全部成功を返してくるので、
アプリケーションレベルでは異常を認識できない。
1つのマシンだけで起きるので、ビデオカード(G400)の
ドライバに関連する問題かなって思って諦めてる。
>>720 ループなど必要なし。
自スレッドのウィンドウなら、
UpdateWindowを呼んだ時にWM_PAINTが送られてくる。
719=722です。
ごめん間違った。 722=718。
>>722 あ、Win98SEでも発生するんですか。
手持ちのマシンではThinkPad X24 のXPで発生するのと
客先のマシンで発生してます。(機種は不明)
自作のXPマシンでは問題ないのでやっぱりVGAのドライバに
依存するんでしょうかね。
(ただこちらでは起動後の時間には関係なく発生しますけど)
情報ありがとうございました。
客先には仕様だと言って逃げることにします。
>>725 あとは、ハンドルの解放忘れ等によるリソースリークが
起きてないかどうかを調べてみた方がいいかもね。
727 :
デフォルトの名無しさん :02/09/10 23:21
SetWindowRgn で楕円作ったつもりが楕円の下側が直線状に欠けてしまう (メーターの表示板みたいな形)んですが,何が原因でしょうか.
使ったことないけど クライアントのサイズ←→ウィンドウのサイズの差分だけ欠けてるとか。
730 :
デフォルトの名無しさん :02/09/10 23:48
CreateWindow での設定サイズをオーバー
731 :
デフォルトの名無しさん :02/09/11 00:43
タイトルバーが無くて ウィンドウのサイズ変更もできない ただ白い四角形が表示されるだけのウィンドウって作れますか?
>>716 VAIOシリーズにだけOEM供給されています
734 :
デフォルトの名無しさん :02/09/11 01:53
質問というかなんというか・・・
http://www.users.gr.jp/ml/archive/delphi/25766.asp ここ見ると、
規約 順序 後始末
stdcall 右から左 関数
pascal 左から右 関数
cdecl 右から左 呼び出し側
と説明されてますが、
__pascalコールで呼び出す必要のあるWin32APIってありましたっけ。
一部(wsprintfなどは__cdecl)を除いて、__stdcallですよね?
windef.hを見てもPASCALは__stdcallと定義されてるし。
x86を前提とした場合は__pascalは使われないと考えて良いのでしょうか?
win16ではpascal使ってます
win32は無いかな。
MFCだけど...MSDNのCWnd::GetFocusのリファレンスにはこんな記述が残ってるぞ。 static CWnd* PASCAL GetFocus( );
ってよく読んだら、
「__pascal、__fortran、__syscall
の各呼び出し規約はサポートされなくなりました。」
と書いてある。
>>734 にあるようにPASCALはマクロだったのね。逝ってきます。
>>737 いや、ですから、そのPASCALの元定義は__stdcallになってます。
(windef.h参照)
>>737 741をよく読め。
> windef.hを見てもPASCALは__stdcallと定義されてるし。
色々ヘッダ見て回りましたが、どうやら__pascalは使われてないみたいですね。
>>738 あ、サポート外ってことでしたか。
これですっきりしました。
調べていただいた方々、ありがとうございまいた。
>>741 738の引用元はSDKでなくコンパイラのヘルプでしょ。
どちらにしろ使われてはいないだろうが。
>>742 いえいえ。こちらこそ、
> 逝ってきます。
って書かれた後に追い打ちを掛けてしまってすみません。
745 :
◆BkH732nY :02/09/11 10:15
TCP/IPで、構造体の送受信はどうやればいいのですか? サンプル等あったら教えて下さい。
>>745 構造体もなにもバイナリで渡すだけだと思うのだが。
747 :
デフォルトの名無しさん :02/09/11 15:13
WinAPIでメールを送信する場合、一番楽なのはどれですか? やはりMAPIでしょうか?数行でできないでしょうか?
>>747 つーかそんな変なの使わずともsocketで数〜十数行だと思うが。
とりあえず「socket smtp」で検索すれば沢山出てくるよ。
750 :
デフォルトの名無しさん :02/09/11 15:36
休止状態をサポートしてるかどうか調べるAPIおしえてくださいまし。
751 :
デフォルトの名無しさん :02/09/11 15:40
smtpを持ってくるってなんだ? あと、数〜十数は言い過ぎ。 確かに、送信部分だけならそうなるけど、 q-printとかbase64エンコードも事実上必須だし。
>>752 送信だけならbase64だけでいい
あと必要なのはShift-JISからJISの処理だね
しかしbase64もShift-JIS->JISもSMTPとは関係ない
MIMEとSMTPをごっちゃにしないほうがいいよ
>事実上必須 読めないのか?
nkf使えばいいじゃん
ShellExecute(0,0,"mailto:
[email protected] ?subject=test&body=aborn_me",0,0,SW_SHOWNORMAL);
送信ボタンは手で押せ。
>>746 敢えて言えば、バイトオーダーや型のサイズの違い(time_t が 32bit か 64bit か)
に気をつけよう、ってとこかね。
758 :
デフォルトの名無しさん :02/09/11 21:47
スレッドを使うLIBをDLLから間接的に呼び出しているのですが、 クライアントが終了すると、LIBのスレッドがクリーンナップを 経ずに強制終了してしまいます。 クライアント ==> DLL ==> LIB DLL in LIB in クライアント in クライアント out <<-- ここでLIBのスレッドが強制終了 LIB out DLL out スレッドを使っているLIBを安全にDLLから呼び出す方法はありますか? もう一つ、クライアントでMFCを使っていると、LIBで確保しているメモリの 誤リーク検出をして、非常に鬱陶しいので、こっちもお願いします。
>>753 送信だけならMIME/base64自体不要だと思うが
dllmainのPROCESS_DETACHでLIBのスレッド終了を 待てばいいのでわ?
まじでおせーてください。
送信だけ派: 送信前にすべてのデータは整っている mimeも必要派: >一番楽なのはどれですか? こんな事を言っている奴が下準備を済ませているとは考えられない
ピリオドのエスケープを忘れて、 メールが切れるとサーバー設置した会社に苦情をつけるな、たぶん。
ESMTPでSJIS直接送るのと、 SMTPでUTF-7で送るのはどちらが 罪深い行為でしょうか?笑い、
>>760 PROCESS_DETACHの前にLIB内のスレッドが閉じられてしまうんです。
スレッドのメッセージキューにも、何の通知もないし、お手上げ状態です。
>>766 添付ファイルでSJIS生のテキストどころかバイナリファイルまで平気で
送られまくってるのにメール本文になるととたんに叩かれるのが
不思議でなりません。どちらもmultipartの一員なのに。
そんなの聞いた事ねー
バイナリだろうがテキストだろうが、 添付ファイルはエンコードして送ってると思うが・・・
771 :
デフォルトの名無しさん :02/09/12 10:56
起動側の acccept で取得したSOCKET にて データの頭の方だけ recv して、その内容に応じた別プロセスを生成します。 別プロセスに、起動側の SOCKET を渡したいので、以下のようにしてみました。 sock を以下のように引数にしてプロセスを起動します。 AnsiString SockName = AnsiString((unsigned int)sock); AnsiString Cmd = "HogeChildProc.exe" + " " + SockName; CreateProcess(NULL, Cmd.c_str(), NULL, NULL, true, NORMAL_PRIORITY_CLASS, NULL, NULL, &SupInf, &ProInfo); HogeChildProc側で、 以下のように引数から SOCKET socket を作成します。 unsigned int ui = (unsigned int)ParamStr(1).ToInt(); SOCKET socket = (SOCKET)ui; その後、 この socket にて recv を試みるんですが、うまくいきません。 もしかして、 呼び出し側で、一度 recv しているといまく行かないのでしょうか?
ソケットはプロセスセーフじゃないよ あと一度recvしたら受信バッファからデータは消える 消したくないならrecvの引数にMSG_PEEKを指定しる
>>771 引数に親のプロセスIDを追加して、子プロセスでDuplicateHandleしれ。
また、もしOSが9x系なら、親が明示的にハンドルを継承可能としてやる
必要がある。
>>775 数種類のナチュラルチーズを加熱溶解し、乳化剤を加えて乳化させ、
それを型に入れて作ったものがプロセスチーズです。
>>776 ありがとうございます。正常動作するようになりました。
れすthxです(^^ゞ
>>772 サイズ 10 のうち、4 だけ読み込んでも受信バッファから消えてしまうのですか?
>>773 CreateProcess の fInheritHandle を true にしてますが、
これだけではダメで、DuplicateHandleも必要ということですか?
>>778 10bytes中4bytes読んだのなら受信バッファには6bytes残る
781 :
デフォルトの名無しさん :02/09/12 17:16
シェルのアイコン(「お気に入り」など)を取得するにはどうしたら良いですか? 一応、フォルダパスを取得 → SHGetFileInfo で実現できてるんですが、 もっとストレートに取得できないかな...と。
というか、フォルダパスを取得 → SHGetFileInfo の方法では、例えば お気に入りのフォルダのアイコンを、ユーザが変えていると破綻するので...
783 :
デフォルトの名無しさん :02/09/12 18:53
API初心者です。CreateProcess関数でソースコードのわからない(自作じゃないアプリ)を制御することは できますでしょうか?
CreateProcessでソースコードの分からない(自作じゃないアプリ)を起動することはできますが?
CreateProcessを使ってソースコードの分からない(自作じゃないアプリ)を 起動して、そのソースコードの分からない(自作じゃないアプリ)を 強制終了することもできますが?
>>782 何で破綻するのかわからん。
変えていればその変えているアイコンを取得できると思うが。
>>787 書き方悪かった。desktop.iniを削除(滅多に無いかもしれないけど)していたり
すると、普通のフォルダのアイコンが取得されてしまう。
>>788 だからその場合、普通のフォルダアイコンが正しいんでないの?
790 :
デフォルトの名無しさん :02/09/12 20:50
>>784 ,785,786
ありがとうございます。
ソフトを軌道した後にプログラムから操作(例えばファイルを開くなど)を加えることはできるんでしょうか?
ファイルを開く・・・ねぇ。 コマンドライン引数を与えて起動させれば開くんじゃないの?
792 :
デフォルトの名無しさん :02/09/12 21:07
MesseageBox と Ifをつかって はい いいえのプログラヌを造りたいのですが ______ ↑ 之の名前がわかりません
>792 ガッカリだ!
795 :
デフォルトの名無しさん :02/09/12 21:24
なんていったかな?
フーン
続きです。 子プロセスで recv しようとしたら 10093 WSANOTINITIALISED WinSockシステムが初期化されていない。 って怒られたので、WSAStartup() を追加した。 すると今度は 10038 WSAENOTSOCK 指定されたソケットが無効である。 って出るし・・・ 訳わからんです(ToT) 結局、 ちゃんと SOCKET が継承されていないんだろうなぁ(´ヘ`;)ハァ 今日は帰って、頭冷やして明日やりますです。 レス下さった方、ありがとうございましたm(__)m ではでは
>>790 べつにCreateProcessしなくても逝けるぞ
メニューの動作をエミュレート(WM_COMMAND送信)するとか、
手作業の段階をWM_KEYDOWNとかkeybd_eventとかで再現するとか。
DDEやOLEオートメーションに対応してるならそれ使うとか
>>797 普通に動くが。
cl -DADDR=0 -DPORT=12345 a.c -Feserver.exe wsock32.lib
cl -DADDR=0x7f000001 -DPORT=12345 a.c -Feclient.exe wsock32.lib
cl a.c -Fechild.exe wsock32.lib
#include <winsock.h>
int main(int ac, char **av) {
SOCKET s, c; char buf[128]; struct sockaddr_in sin;
PROCESS_INFORMATION pi; STARTUPINFO si = {sizeof si};
WSADATA data; WSAStartup(MAKEWORD(1, 1), &data);
#ifdef PORT
s = socket(PF_INET, SOCK_STREAM, 0);
sin.sin_family = AF_INET; sin.sin_port = PORT;
sin.sin_addr.s_addr = htonl(ADDR);
#if !ADDR
bind(s, (struct sockaddr *)&sin, sizeof sin);
listen(s, 1);
c = accept(s, NULL, NULL);
recv(c, buf, 4, 0); printf("server: %.4s\n", buf);
sprintf(buf, "child %d", c);
CreateProcess(NULL, buf, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi);
WaitForSingleObject(pi.hProcess, INFINITE);
#else /* ADDR */
connect(s, (struct sockaddr *)&sin, sizeof sin);
send(s, "0123456789", 10, 0);
#endif /* ADDR */
#else /* !PORT */
recv((SOCKET)atoi(av[1]), buf, 6, 0); printf("child: %.6s\n", buf);
#endif /* !PORT */
closesocket(s); return 0;
}
仮想キーコードから、他のキーコードとは重ならない文字列を作ることはできますか? UINT uScanCode = MapVirtualKey( VK_INSERT, 0 ); GetKeyNameText( uScanCode << 16, keyname, sizeof(keyname)-1 ); とすると Ins ではなく Num 0 が得られ VK_NUMPAD0 との区別ができないのです。 他に VK_PRIOR, VK_NEXT, VK_END, VK_HOME, VK_LEFT, VK_UP, VK_RIGHT, VK_DOWN, VK_DELETE などもうまくかないようです。
uScanCode = MapVirtualKey(vk, 0); if(vk == VK_APPS || vk == VK_PRIOR || vk == VK_NEXT || vk == VK_END || vk == VK_HOME || vk == VK_LEFT || vk == VK_UP || vk == VK_RIGHT || vk == VK_DOWN || vk == VK_INSERT || vk == VK_DELETE || vk == VK_NUMLOCK) ext = 1 << 24; GetKeyNameText((uScanCode << 16) | ext, keyname, sizeof(keyname)-1);
なるほど Extended-key flag は個別対応でガシガシですか。 どうもありがとうございます。
806 :
デフォルトの名無しさん :02/09/14 00:34
VC6sp5 をコマンドラインから使っています TryEnterCriticalSection を使おうと思ったのですが、 そんな関数ないよって言われてしまいます。 MSDN を見ると winbase.h で宣言されていて kernel32.lib に入っているようなのですが、 windows.h をインクルードしていてもそんな関数ないと言われ、 シグネチャだけ書いてごまかしてコンパイルしても リンク時にちゃんと kernel32.lib を引き渡していても CCriticalSection.obj : error LNK2001: 外部シンボル ""int __cdecl TryEnterCriticalSe ction(struct _RTL_CRITICAL_SECTION *)" (?TryEnterCriticalSection@@YAHPAU_RTL_CRI TICAL_SECTION@@@Z)" は未解決です math.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と言われてしまいます。 どうしてでしょうか?
Windows NT/2000:Windows NT 4.0 以降 Windows 95/98:サポートされていません。 ヘッダー:winbase.h 内で宣言 インポートライブラリ:kernel32.lib を使用 NT系であることを明示しろ。 リンクエラーはextern "C"
>>807 ありがとうございます。
#define _WIN32_WINNT 0x0500
で逝けました。
質問 Win98SEでVc6sp5を利用して 画像の印刷プログラムを書いています。 プリンタを示すDCにStretchDIBitsで 300*400程度のイメージを書き込むことには成功するのですが。 色々問題が発生します。 1 デジカメで撮影した1600*1600くらいの画像を貼り付けると失敗して表示されない。 2 そこそこのサイズを2枚はると失敗して何も表示されない。 3 困ったことにエラーが帰ってこない。 そこでプリンタDCを使わないでスクリーンから生成したメタファイルを 使って同じようにDIBを貼り付けてみたところ。 同じ症状になりました。 なにか解決方法はあるのでしょうか?
>>809 貼り付けようとしてるDIBは正しいか?
(ファイルに保存してペイントとかで開けるか?)
StretchDIBitsでディプレイに表示することができるか?
SetStretchBltModeでHALFTONEとか指定してないか?
あと、JPEGとかPNGを書き込もうとしてるけど、
ドライバが対応してない(あるいはバグがある)とか?
811 :
画像分割は避けたい。 :02/09/14 22:18
>>810 StretchDIBitsで画面表示も印刷も出来ます。
BltModeは無指定です。
データはBI_RGBのDIBで、Jpegではありません。
小さな画像なら印刷も画面表示も成功します。
ただ
300万画素程度のデジカメで撮影したデータをA4一杯に広げて印刷を
かけると失敗します。
自己レスみたいですが
画像印刷について方々を調べて廻ると、
1 印刷はStretchDIBitsを使わないと失敗する。
2 24bit無圧縮のDIBを使う事、DDBは印刷できない。
3 大きなBitmapは分割して転送する。
とあります。
多分今回の問題は転送するデータが巨大?だった為でしょう。
しかし これはあくまでプリンタードライバーを経由する
問題の為であり、印刷時に限って起こる問題と思います。
メタファイルを画面のDCから取得する場合は
その制限を受けないものと考えられますが、
実際は同じ症状になります。
うーん困った。
画像分割は処理がめんどくさすぎる。
第一成功するかどうかわからん。
外してると思うが、 そのプリンタでは GetDeviceCapsでRASTERCAPSを取ったとき、 RC_STRETCHDIBがないとか(w
>>811 719,722辺りに書かれている症状と少し似てるね。
ウインドウの上下関係をいじるにはどうすればいいでしょう?
>>814 Zオーダーのこと?
それとも、単なる座標のこと?
まぁ、どちらにしてもSetWindowPosを使う
>>813 症状は同じですね。
小さな画像は正常に動作し、大きな画像は真っ白になるが
APIは全て正常値を戻す。
こちらも原因調査中です。
新たにわかったことは
1 1024*1024以上のBitmap?の転送は失敗しやすい。
2 16BitのAPIを通過する処理はリソース制限を非常に受けやすい
現在画像分割処理で調査中・・あぁー面倒だぁ。
これで失敗したら手詰まりだぁ。
>>816 >>816 症状の切り分けとして、
単に巨大な画像を送るとコケやすいのか
拡大して、巨大にするとコケやすいのか
を判別してみたら?
SetDIBitsToDeviceとかで、等倍でデカいのを送ってみるとか
何か1行余分だけど、 単なるミスです。他意はありません。
819 :
デフォルトの名無しさん :02/09/15 17:17
他のアプリケーション内のエディットコントロールのテキストを取り出すにはどうすればいいですか? WM_GETTEXTなどはいくらSendMessageしても届いてないようです(Spy++で確認) よろ
GetWindowText は昔の時代にはそのまま通った気がする。 いまはNTの時代だからプロセス境界を真っ当に超える フック+共有メモリ(FileMappingによる)あたりが妥当か。
なぜ、COMを使わない? HRESULT GetEditText([out, retval]BSTR* pResult);
>820 ども。 共有メモリを作ってそこに吐き出させようとしているのですが メッセージ自体が届きません。 フックとおっしゃってますから、メッセージでテキストを吐かせるというアプローチ自体がちがうと言うことかな? フックって具体的に何をフックしますか? いろいろ聞いてスマソ >821 COMを全く理解してない物で・・
ウインドウを間違えているという落ちではなかろうな。
>821 それは、「他のアプリケーション」のコードに 手を出せることが条件では? 「他人のアプリケーション」でも有効なのか?
>>824 >「他人のアプリケーション」でも有効なのか?
しゅーん。すまそん。
>823 その可能性も疑ったのですがSpy++で確認したところ ターゲットに送っているハズです。 ちなみに時プロセス内に用意したエディットには正しく処理されます。 ウインドを選んでメッセージを投げる部分はプログラムになっているので 手で打ち間違えたとかそう言う可能性はなさげです
普通のエディットコントロールはCOMのインターフェイスもってないぞ
でたらめ言ったおわびに、リクターのナポレオン本(Advanced Windows)調べたよ。 結論から言うと、NT4では可能(Advanced Windowsのターゲット)。ならば、2000やXP でも可能ではなかろうか? ミソは、user32内で、WM_GETTEXTLENGTHを最初に呼び出し、共用メモリーにその長さ を割り当て、次にWM_GETTEXTを実行する(アプリケーション側はWM_GETTEXTLENGTH 呼ぶ必要はない)。ということろを考えると、823の予測が正しいと思われ。 そもそも、自プロセス内のHWNDしか取れないAPIを呼び出して、それを利用している という可能性は?
>>819 > WM_GETTEXTなどはいくらSendMessageしても届いてないようです
WM_GETTEXTは他のプロセスでも取得できますが?
830 :
デフォルトの名無しさん :02/09/15 21:13
ラジオボタンをアプリ起動時にチェックさせたいです。どうすればいい? 猫でもわかるプログラミングで紹介されてるけど、そのとおりにやってもうまくいきません。 あと、ラジオボタンのどの項目がチェックされてるかを調べるのにはどうすれば?
とりあえずいろいろ調べてみたところ時々メッセージは届くようです 10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。
>830 もうちょっと詳しく書いたら? うまくいかないならどう上手くいかないのかを 書くのが礼儀と思うんだが。
833 :
画像印刷、分割失敗 :02/09/15 21:36
>>810 >>813 >>816 StretchDIBの処理を改良して
巨大Bitmapを100*100に分割して転送するように処理を修正しました。
結果
20枚?程転送すると急に何も転送しなくなり(APIはエラーを戻さない)
(つまり虫食いの画像が出来上がる。)
さらに転送するとhDCの他のデータも全て消えてしまいます。
(先に書き込んだ部分も含めて)
書き込み先のコンテキストはメタファイル、PrinterDC共に失敗でした。
考察
bitmapの転送はサイズが巨大でも、書き込む回数が多くてもダメと言うことです。
お願い!!
もうメタファイルは諦めるしかないかも。
頼むーー誰かヒントをください
834 :
デフォルトの名無しさん :02/09/15 21:42
>>832 http://www.kumei.ne.jp/c_lang/sdk/sdk_31.htm ↑ここの
Button_SetCheck(GetDlgItem(hWnd, IDC_RED), BST_CHECKED);
これで、IDC_REDがオンにセットされます。 関数では
((void)SendMessage((hwndCtl), BM_SETCHECK, (WPARAM)(int)(check), 0L));
となります。(check)のところにBST_CHECKEDまたは、BST_UNCHECKEDがきます。 これに対して、ボタンの状態を取得するには、
Button_GetCheck(hwndCtl);
関数では、
((int)(DWORD)SendMessage((hwndCtl), BM_GETCHECK, 0L, 0L));
の部分を自分のプログラムに実装したんですが、
Button_SetCheckとButton_GetCheckは定義されてないとかコンパイラ言われるし、
SendMessage使ったらコンパイルはできるけど、起動したら使ってない時と変わらないです。
助けてください
>>819 > でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。
WM_GETTEXTは他のプロセスでも直接取得できますが?
ReadProcessMemoryは何のために?
>>834 > Button_SetCheckとButton_GetCheck
#include <windowsx.h>
> SendMessage使ったらコンパイルはできるけど、
> 起動したら使ってない時と変わらないです。
目的のラジオボタンのウィンドウハンドルは
間違いなく取得できてるの?
実際にはSendMessageをどのようにソースに記述したの?
>835 ホントだ・・。どうもありがとうございます。 実はゴールはエディットではなくて試しにエディットを使ってただけなので もうしばらくReadProcessMemoryなどの使い方をチェックしてみます。 (たぶんこの方法でもうまくいくはずだしこれで動かせないと困る……)
838 :
デフォルトの名無しさん :02/09/15 22:27
>>836 BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg) {
case WM_INITDIALOG:
((void)SendMessage(hDlg, BM_SETCHECK, (WPARAM)(int)BST_CHECKED, 0L));
break;
以下省略
839 :
デフォルトの名無しさん :02/09/15 22:32
ダイアログベースのアプリケーション作ってるんだけど・・・ 右上のバッテン押したら終了するようにするにはどうすればいいですか?
>>838 ダイアログウィンドウに送信してどうすんのよ?
というか上に書いた回答をもっとよく読め。
SendMessage(GetDlgItem(hDlg, コントロールID),
BM_SETCHECK, BST_CHECKED, 0);
または
SendDlgItemMessage(hDlg, コントロールID,
BM_SETCHECK, BST_CHECKED, 0);
または
CheckDlgButton(hDlg, コントロールID, BST_CHECKED);
補足。 ラジオボタンの場合、初期化時以外は CheckRadioButtonをおすすめする。
>>839 モーダルかモードレスかで答えが変わってくる。
つーか出来てないということはモードレスかな?
843 :
デフォルトの名無しさん :02/09/15 22:54
>>843 だからモーダルとモードレスどっちなのよ?
845 :
デフォルトの名無しさん :02/09/15 23:08
>>845 WM_COMMANDで かつ LOWORD(wParam)がIDCANCELのメッセージか、
または WM_CLOSEメッセージを
捕まえて DestroyWindowすべし。
WM_COMMANDで処理したいなら、WM_CLOSEメッセージにはFALSEを返すべし。
847 :
デフォルトの名無しさん :02/09/15 23:39
LOWORD(wParam)って何をしているのでせうか? 詳細キボンヌ
>>847 それくらい、includeディレクトリの中見て自分で調べろよ。全部大文字ってことは
マクロだから、見りゃわかるだろ。
>>848 わかんねーよ。だからキーテンだろーが
何様だ、おまえ?
>849 おまえこそ知らない人に ものを教えてもらう立場にあるというのに なんだその口の利き方は? まぁいい。マジレスしてやる。 >847 >848と同じだがincludeディレクトリの中身見ればわかる。 というより右クリック定義うんたらで飛べるはず。 もし、即ヘッダ見るということを思いつかないなら まだAPIは早い。 Cでもやってるべし。
852 :
デフォルトの名無しさん :02/09/16 01:17
LOWORD() の関連質問なんですが、 DWORD a; WORD b = ( WORD ) a ; WORD c = ( WORD )( a & 0xFFFF ) ; LOWORDの define は c ですね。 で、何でわざわざ c のような変換をするのか分かりません。 bより c のような変換の方が安全(?)とかそういうのがあるんでしょか?
外してたらスマソ。今、考えたとこで検証したわけじゃないんでね。 char ch = -1; WORD c = LOWORD(ch); とやった場合であっても、c = 0xff となって欲しい。 もし、WORD b = (WORD)ch; と展開すると、b = 0xffff となる。 からじゃないかな? 識者の突っ込みキボーン。
>>852 WIN32環境ならばどちらでも変わらない(別に0xFFFFを付ける必要はない)
けど、仮にWORDが16ビットより大きいサイズの処理系が
あったとすれば、そこでは 0xFFFFが大きな意味を持つ。
ちなみに俺のVC++5.0はヘッダファイルが古いからか
#define LOWORD(l) ((WORD)(l))
と定義されてるよ。
>>853 どちらの場合も結果は 0xFFFFですが。
>>854 逝ってきます……
64bit Windows用の定義が追加されたってことなのかな?
>853-855 どうもです。 >仮にWORDが16ビットより大きいサイズの処理系があったとすれば ということで納得です。
>10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます 4バイト…… ……ポインタのサイズ?
858 :
デフォルトの名無しさん :02/09/16 09:06
DWORDってDouble Word の略でしょ? Wordってどういう意味がある変数型なの? あと、Doubleが付くことで意味が違ってるの?
WORD ASCII文字1文字分 =1バイト=8bit DWORD ASCII文字2文字分 =2バイト=16bit
ごめん間違えた WORD ASCII文字2文字分 =2バイト=16bit DWORD WORD2個分 =4バイト=32bit
>>859 それじゃ Character だよ。
WORD は、もともとはプロセサが普通に処理できるデータの大きさ。
C 言語言うところの int と同じ概念。
MS が使いだしたのが、8086〜80286 の頃だったので、16bit になって
今日に至る。DWORD はその倍のビット幅 (=32bit)
862 :
デフォルトの名無しさん :02/09/16 10:03
IA-32では WORD =16bit(2byte) DWORD=32bit(4byte) QWORD=64bit(8byte) が慣例だね。 > WORD は、もともとはプロセサが普通に処理できるデータの大きさ。 のようにCPUにより異なるから注意しよう! ってここアセンブラのスレだったっけ?
864 :
デフォルトの名無しさん :02/09/16 11:30
>>863 プッ、そんなんでアセンブラしてるつもりになってるよ
>のようにCPUにより異なるから注意しよう! 正しくは、定義により異なる。
> アセンブラしてる ぷぷっ
SPARCなんかだとWORDは4byteが慣例だったなあ sagesage
868 :
デフォルトの名無しさん :02/09/16 13:21
Window(DC)に描画途中の画面を表示させ無いようにする、 HSPでいうredraw 0とredraw 1のような感じのAPIってありませんか?
CreateCompatibleDC CreateCompatibleBitmap etc...
やっぱし自分でバッファ確保しないと駄目ですか。 それならそれでオッケーでス。ありがとうさようなら。 もう会うことは余り無いでしょう。
871 :
デフォルトの名無しさん :02/09/16 15:11
アセンブラとアセンブリの違いにこだわっているやつほど通常の会話に変な日本語を使っているやつが多い。 マーフィーの法則 第23条の18より
(´-`).。oO(
>>871 は自分の文章が変なことに気づいているのだろうか…)
どこもおかしくねーぞ(藁 むしろ>871のは文章じゃなくて文なわけだが
>>872 マーフィー本は俺のプログラマ生活にとって欠かせない、
いわばバイブル。条項もすべて暗記した。
が、アセンブリとアセンブラの意味については
未だよくわかっていない。
>アセンブラしてるつもり ウケタ
>>873 「〜やつほど〜やつが多い」は明らかに変だが。
アセンブラー:アセンブルするひと。 アセンブリ:アセンブリ言語。言語名。 アセンブル:アセンブリ言語を機械語コードに直すこと。 ・・・と思う。
>>877 > アセンブラー:アセンブルするひと。
ふつーは処理系の方を指す。nasm とか gas とか。
.NETではアセンブリはまた違う意味が
アセンブラって、 アセンブリ言語を機械語コードに直すソフトのことだよね? 昔、「ブリをブラでブルする」と覚えた気が・・・。
882 :
デフォルトの名無しさん :02/09/16 18:34
ダイアログボックスにアイコン付けたいんだけど、どうしたらいいかな?
WM_SETICON SetClassLongでもまあできないこともない。
Win32系で64bitの変数扱いたい場合どうしたら良いですか? コンパイラはBCC5.5.1です
LONGLONG
int_64(コラ
887 :
デフォルトの名無しさん :02/09/16 22:00
LONGSHORT
どうやらBorlandC++は__int64という型のようでした ところで追加質問になってしまうんですけど printfとかで64bitの整数を文字列にする事ってできないんですか? %dだとintサイズだし、色々調べてllとか付けて見てもNGでした
>>888 > printfとかで64bitの整数を文字列にする事ってできないんですか?
使ってるライブラリによる。Borland は知らんが VC の MSVCRT.DLL だと
プリフィクス I64 だね。
GetOpenFileName でファイルの種類ごとにデフォルトの拡張子を指定するのにはどうすればよいのでしょう。 試しに lpstrDefExt = "txt\0htm\0ini\0doc\0"; みたいな感じでやってみましたが駄目でした。 フックを使って lpstrDefExt を変更するという手も考えたのですが、 フックを使うとプレースバーが表示されなくなってしまうようです。 どなたかおねがいします。
>890 無事表示できました ありがとう
>>892 ありがとうございます。
その方法で解決できました。
プロジェクトの上の方で
#define _WIN32_WINNT 0x0400
って決定がされていたので
#pragma pack( push, 1 )
typedef struct tagOFN2000 {
DWORD lStructSize;
(中略)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
} OPENFILENAME2000;
#pragma pack( pop )
と途中で宣言し、
(必要ないかもしれませんが)次のように場合分けしておきました。
ofn.lStructSize = ( bWin2000MeLater ? sizeof(OPENFILENAME2000) : sizeof(OPENFILENAME) );
GetSaveFileName( (OPENFILENAME *)&ofn );
895 :
デフォルトの名無しさん :02/09/18 03:51
>>895 対象 URL
http://sakashita.strangeworld.org/source/up0768.jpg --------------------------------------------------------------------------------
mailto ストーム
アンカータグではないタグで mailto: の記述が見つかりました。
メール作成ウィンドウがたぁっくさん出てきてしまうかもしれません。
パワーのないマシンでは,ブラウザがフリーズする可能性があります。
--------------------------------------------------------------------------------
FDD アタック / concon クラッシャー等 [img タグ等]
IMG タグや JavaScript 等により file スキーマを参照します。
ブラウザの設定によってはフロッピーディスクドライブに不要なアクセスが続いたり, OS がクラッシュする可能性があります。
>>895 ム板に、しかも今時こんなブラクラ貼るなんて(・∀・)イイセンスしてるな。
898 :
デフォルトの名無しさん :02/09/18 06:24
やりかたを質問してるのでは?
899 :
デフォルトの名無しさん :02/09/18 14:05
ウィンドウプロシージャ側でコマンドライン引数を利用したいのですが グローバル変数とメッセージ、どちらで伝えるべきですか?
>>899 グローバル変数の方が楽だろうな
GetCommandLine()を使うのもありだろ
>>899 CreateWindowの引数という手もあり
GetCommandLine()ですか。 どうやらこれがよさそうですね、ありがとうございます。
PSH_WIZARD なプロパティシートで「キャンセル」ボタンを非表示にしたいのですが、 そんなことってできるのでしょうか?
>>903 GetDlgItem(IDCANCEL)でキャンセルボタンのCWnd*とれたかも
すくなくともVC5の時に普通の(ウィザードでない)プロパティシートではできた CPropertySheetの派生クラスを作ってOnInitDialog()をオーバーライドして CPropertySheet::OnInitDialog() ; CWnd *pwndCancel = GetDlgItem(IDCANCEL) ; pwndCancel->ShowWindow(SW_HIDE) ; こんな感じか(あってるかどうかしらん)
Win32Apiスレだった 904,905はMFCの場合
>>908 逝かなくてもいいよ。
十分ヒントになったはず。
>>903 キャンセルできないウィザードというのはいかがなものか。
×ボタンを押して閉じれば良し。
UIとしてあんまり、、ね。
×ボタンってあったっけ?
標準にすると右上にあると思う
盛り上げて下さってどうもありがとうございます。903でございます。 「戻る」「次へ」に対してキャンセルができないのは確かにダメダメだと思いますが、 「完了」があるなら「キャンセル」は要らないと思うのですけれども どんなもんでしょうか? んで、やっぱり GetDlgItem() しないとダメなのですかね? あんまり美しくねーなー…
>「完了」があるなら「キャンセル」は要らないと思うのですけれども 凡人には理解できません。 どういう論理ですか?
>>915 あなたの作るソフトは一生使わないと心に固く誓いますた。
>>915 は初心者板へ行ってアプリの使い方から勉強しる
919 :
デフォルトの名無しさん :02/09/19 00:36
画面のハードコピー処理のプログラム(私がプログラミングしてものではありません)で、 殆どのPCでは印刷に成功するのですが、中には印刷出来ないPCがあります。 印刷まで行かないPCの失敗箇所は、 CreateCompatibleBitmapで作ったビットマップを SelectObjectで選択するところでNULLが返却されています。 機種またはPCごとの設定で何か違いがあるのでしょうか? 私自身まだ詳しくないので、わかりづらい説明で申し訳ありません。
完了だと、指定した内容で何らかの動作が実行されてしまったり、設定内容が保存されてしまったりするじゃないですか。実際は知らないけど、少なくともイメージ的には。 それに対して、つまりキャンセルしたいんですよ。何の動作も行わせたくなかったり、設定内容を保存したくなかったり。
じゃあキャンセル封じんなよ ネタか?
支離滅裂だな。ネタ認定。
>>921-922 ネタにしたいから焦ってるのか?
どうして、920が903=915と同一人物だと
思っているのか小一時間問い詰めたい
今日の目標:誰宛のレスなのかを明確にしよう。
結論:ウィザードに限らずダイアログにはキャンセルを実装しよう。
目標:出来れば人生のキャンセル方法も議論してみよう
ごめん。漏れ勘違いしてたのかな。ウィザードって @何とかウィザードにようこそ!(戻る|次へ|キャンセル) A条件1設定(戻る|次へ|キャンセル) B条件2設定(戻る|次へ|キャンセル) C次へを押すと実行します(戻る|次へ|キャンセル) 〜ここで実行〜 D実行しますた(戻る|完了) だと思ってたけど違うの?ひょっとして @何とかウィザードにようこそ!(戻る|次へ|キャンセル) A条件1設定(戻る|次へ|キャンセル) B条件2設定(戻る|次へ|キャンセル) C完了を押すと実行します(戻る|完了|キャンセル) 〜ここで実行(ウィザード閉じる)〜 D実行しますた(メッセージボックス) だったりする?
どのウィザードをもって判断してるんだろう・・・
>>927 実行した後で戻れるプログラムって、怖いけど見てみたい。
ごめん。間違えた。眠気が。。。 前者の@とDには「戻る」はないです。 そういうのってなかったっけ?
>>932 それなら最初からそう説明しないと、ずっとキャンセルボタンが無いのかと思われるよ。
そういうウィザードはある。もしくはキャンセルボタンなどの使わないボタンを使用不可にするとか。
ファイルの非同期読み書きは どのようにすればよいのでしょうか?
CreateFile で FILE_FLAG_OVERLAPPED 付けて、 ReadFileEx, WriteFileEx使えばええんでわ?
>>931 単にIEがOSの一部だから、起動時にロードされてるんだろ
隠しAPIの10や20使ってるとは思うが・・・
>>802 亀レスでスマソ
CreateProcessするところを、別スレッドを起こして
その中でやっていたためにうまく行かなかったようです。
ソケットは、プロセスセーフではない、だけでなく、
スレッドセーフではない、ということでしょうか?
>>931 隠しAPIごときで差が出ることほとんど考えられないな。
>>933 言葉足らずでスマソン。
でも後者のスタイルが一般的なのならそっちにしようかと思います。
後学のために使わないボタンを使用不可にする方法も
一応知っておきたいのですが、やっぱ GetDlgItem() なんでしょうか。
>>937 スレッドセーフの意味がわかっているのかと小一時間・・・(略
>>919 とりあえずGetLastError()でも見てみたら
>>939 PropSheet_SetWizButtons()とか。あと MFCの CPropertySheet あたりを参考に汁!
キャンセルボタンは、ずーと表示で、「次へ」を「完了」ボタンに変えるのが標準っぽいよ。
>>942 PropSheet_SetWizButtons() ではキャンセルは非表示または無効にできないですよね。
やはり
>>927 で言う後者が標準なんでしょうね。
>>943 そんなに非表示にしたいなら、実際にやってみりゃいいのに。
::ShowWindow( ::GetDlgItem( hWizDlg , IDCANCEL ) , SW_HIDE );
でできたよ。
945 :
デフォルトの名無しさん :02/09/19 14:29
ファイルハンドルから、ファイル名って逆引きできませんか?
946 :
デフォルトの名無しさん :02/09/19 14:38
NT4.0でGetFileAttributes("NUL")を呼ぶと、FILE_ATTRIBUTE_DEVICE ビットが立っていないのですが、これはXP/2000でも同様でしょうか? NT4.0以降でファイルをオープンせずに、デバイスかどうかの判別をするには どうしたらいいのでしょうか?
>>945 CreateFileMapping -> MapViewOfFile -> GetMappedFileName
の3段攻撃で。
>>947 THX。E:\test.txt を試したら、"\Device\HarddiskVolume4\test.txt" と
返ってきて面食らいましたが。
//うーん、でも、GetMappedFileName が 9xでは使えないのか...
>>941 アドバイスありがとう。
仰る通りにエラー番号を取得してみますね。
では。
950 :
デフォルトの名無しさん :02/09/19 23:27
age
SDKでフレームを実現するにはどうすれば良いのでしょう? 因みにフレームとはウインドウを仕切るフレームのバーの事を指しています。
初めて書き込ませてもらうんですが APIでアルファブレンディングを実装するにはどうしたらいいのでしょうか? ピクセル単位でブレンドしたい画像それぞれのRGBを取得して 計算を行えばいいのでしょうか? 計算の方程式は簡単に思いつくのですが、それでは恐ろしく遅いと思うので 一応ゲームに使う予定なので、もっと早い方法はないのか……と 思っているところです。
>>951 スプリッタのこと?
完全に自分で実装するしかないよ。
WM_LBUTTONDOWNが来たときにSetCaptureして〜てな感じで。
>>952 AlphaBlend(
HDC hdcDest,
int nXOriginDest, int nYOriginDest,
int nWidthDest, int hHeightDest,
HDC hdcSrc,
int nXOriginSrc, int nYOriginSrc,
int nWidthSrc, int nHeightSrc,
BLENDFUNCTION blendFunction
);
質問です。 構造体のリファレンスが載ってる本もしくはHPってしりませんか?
>>954 お前は
今朝までに作った構造体の数をおぼえているのか?
>955 お前は今まで食べたパ(以下略
(以下略 =>ンツの数を覚えているのか?
ある大きさ(単位pt)のフォントの高さの上限というものは決まっているのでしょうか? 例えばどんなフォントでも12ptならば高さ0〜X以内におさまる、と言えるのでしょうか? 言えるのならばXの値を取得する方法を教えてください。
>>959 フォントサイズが12ptなら高さ上限は12ptだと思うが?
何の単位で取得したいんだか。
>>950 次スレは?
962 :
デフォルトの名無しさん :02/09/21 03:21
指定された文字が全角か半角かを判別するAPIありませんか?
>>962 楽をしたいのならスプリッタ専門のウインドウを作るといいよ
勿論、その分リソース消費することになるけど。
それがイヤなら実装でがんばるしかない。
そもそもプロポーショナルフォントに全角も半角もないが。
>>963 文字ってなんだよボケナス。
SJISの上位バイト判定ならIsDBCSLeadByteでも使っとけ。
>>965 ネタで言ってんのかマジで言ってんのかわからん。
>>962 役に立たないかも知れないけど、
うぷろだ用意してきたら昔つくったソース上げるよ
>>964 いい人がいるもんだな。
超低レベルな煽りしか書けないアホ共に
爪の垢を煎じて飲ませてやってくれ。
>>965 勿論固定ピッチのフォントです
>>966 文字コードとかに依存しない方法が知りたいんです。
たとえば、昔PC98であった2バイト半角文字とか、UNICODEのキャラクタとかのように、
文字列のバイト数で簡単に判別出来ない事があるので
指定のグリフの属性がhalf-widthかfull-widthか知りたいのです。
勿論、そんなAPIが無いので困っているのですが…
http://www.microsoft.com/japan/developer/windows/techart/FixedPitchFont.asp ここで明らかにされたようにXP以外の環境だと、
固定ピッチでも全角が常に半角の2倍の幅になるとは限らないので
GetCharWidth32()で得た値を信じて文字を描画していくことが出来ないのです。
今まではSJISだったので単純に(文字列のバイト数*半角文字の幅)で幅が計算
出来たのですが、UNICODE化するとそうも行かず困ってます。
>>936 例の和解で公開されたものから1つ例を挙げるとShowJavaConsoleか。
これのおかげで速くなってるとはまったくもって思えないけど
取得したいのは論理単位でです。 おなじ12ptでもフォントによってTEXTMETRICのtm.tmHeightは異なるので 上限があるのかなと思ったのですが…
>>970 ふつーGetTextExtentPoint32()で一々数えると思うが。
新スレ立てます。
>>970 Unicodeか・・・ちなみにギリシア文字(アルファとかベータとか)は全角だと思いますか?半角だと思いますか?
>>976 んなVB厨みたいなこと言うなよ。
全角に決まってるじゃん
固定ピッチフォントで確かめれば一発でわかるじゃん。
ちったー自分で試してみろよ
>>977 ぎゃはは! マヌケなDel厨発見。
コードページって知ってるか?
それ以前にUnicodeって知ってるか?
けっこう笑えたんで晒しとくね。
>977 固定ピッチのCourier Newで試してみたところ、半角ですた。
>>977 実は自分がVB厨?
( ´,_ゝ`) プッ
仲良くな。
982 :
デフォルトの名無しさん :02/09/21 17:01
> 全角に決まってるじゃん > ちったー自分で試してみろよ ( ´,_ゝ`) プッ
>>977 自分が限られた環境の中で生きていることを忘れているらしい…
977のスキルを考慮して反論を予想してみると、 V B 厨 必 死 だ な (藁 くらいが関の山だろな。 自業自得なんで同情はできんが。
>>984 「俺がやったときはそうだった」とかな。
986 :
デフォルトの名無しさん :02/09/21 17:36
CreateThreadについて質問です。 MSDNのヘルプに > C ランタイムライブラリの関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、 > _beginthread 関数と _endthread 関数を使うようにしてください。 と書いてあったのですが、これは何故ですか? 言われたとおり_beginthread/_endthreadを使いましたが、気になったんで…
FAQだ氏ね
ランタイムの初期化処理や終了処理が必要になるから。 ただし、すべてのランタイム関数で必要なわけではない。
>>986 ライブラリの内部変数排他処理絡みじゃないの?
_beginthreadで、排他処理用mutexの初期化とかやったりとか
考えられる。(合ってるかどうかわからないけど)
なんでライブラリのソースみないの?
例えば asctime のような関数をスレッドセーフに作るなら、スレッドごとに領域を確保しなきゃならんし、解放しなきゃならんでそ。実装の詳細は知らんけどたぶん。
きょうび 1000getなんて流行りませんな
きょうび 1000getなんて流行りませんな
きょうび 1000getなんて流行りませんな
やれば?
逝け池
1000ゲト
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。