トップページ⇒tech
1001コメント311KB

Win32API 質問箱 Build5

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。

前スレ
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html

Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html

Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html

Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/

参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp

猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0002デフォルトの名無しさんNGNG
早朝からお疲れ様です
0003デフォルトの名無しさんNGNG
>>1
乙
0004デフォルトの名無しさんNGNG
隠しAPI 272個公開じゃー。

MS、和解案準拠で各種の通信プロトコルとAPI公開へ
http://www.zdnet.co.jp/news/0208/06/nebt_01.html

米マイクロソフト、ウィンドウズのコードを一部公開へ
http://www.cnn.co.jp/business/K2002080600088.html
0005デフォルトの名無しさんNGNG
前スレの>>988
> やるなら、
> if (CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1) != '\\')
>   lstrcat(lpszPath, TEXT("\\"));
> とかだろ。
これは
if(lstrcmp(CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1), TEXT("\\")))
  lstrcat(lpszPath, TEXT("\\"));
ってことかな?
これも「も\\」になるのだけど。
0006デフォルトの名無しさんNGNG
>>4
チョット(・∀・)ワクワク!!
0007デフォルトの名無しさんNGNG
秘密のAPI!?
そんなのがあったのかー。MSならやりそうなこった。
だんだんWindowsで作るのが馬鹿らしくなるな・・・
0008977NGNG
> これは
> if(lstrcmp(CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)-1), TEXT("\\")))
>   lstrcat(lpszPath, TEXT("\\"));
> ってことかな?
if( *CharPrev(lpszPath, lpszPath+lstrlen(lpszPath)) != TEXT('\\') )
  lstrcat(lpszPath, TEXT("\\"));
ってことではなかろうか。
0009デフォルトの名無しさんNGNG
lstrlen使うなら、頭からCharNext適用していったほうがよくねーか?
0010デフォルトの名無しさんNGNG
ここ読むまで API = システムコールだと思ってたから、
ただのライブラリだと知って愕然とした記憶が有るよ。
ファイル列挙するのに FindFileFirst&Next 使えって一体。
Open&ReadDirectory みたいな関数でさっくりと
ディレクトリハンドル開かせろ、読ませろ、とか思ってしまう。
0011デフォルトの名無しさんNGNG
前スレつまんない埋め立て方だな・・・
0012デフォルトの名無しさんNGNG
前スレの >>992
仮に OleLoadPicturePath() 関数を使って画像を展開したとしても
少なくとも GIF に関しては特許料を支払う必要がある(とユニシス社は主張している)
JPEG に付いては知らん
0013デフォルトの名無しさんNGNG
>>10
スレ違いになるけど #include <dirent.h> でどうよ
0014JPEG特許問題NGNG
>>12

たしかに「GIF恐いからGIFだけ排除した」とか書いてる人見ますね。

でも、OleLoadPicturePathが勝手にGIF読んでるだけだから
折れは知らんと言うのはダメなのかな?

折れはJPEGを読みたいだけだ。文句はMSにすれ。なんて。
−−>訴えられたら負けデスか?
0015デフォルトの名無しさんNGNG
>>14
少なくともMSも味方はしてくれんと思うけど。
http://www.microsoft.com/DEVONLY/Unisys.htm
> Although Microsoft is licensed under these patents, Microsoft's
> license does not extend to software developers or third parties
> who use Microsoft toolkit, language, development or operating
> system products to provide GIF read/write ...

# 誰か裁判に持ち込んではっきりした判例を作ってくれないかなぁ。
0016デフォルトの名無しさんNGNG
>>14
これをコピーしてるのはコピー機なんだから著作権料はゼロックス社に請求しろ
と言ってるようなもんだ

少なくともユニシス社的には
0017JPEG特許問題NGNG
>>15
英語じゃよく分かりませんが、確かにMSは味方してくれそうにないですね。w
MS独自開発の画像フォーマットでも作ってもらいましょうか。
WMFは却下。

>>16

いやいや、折れはゼロックスのコピー機を売ってる立場であり、
客が紙幣をコピーしようがこっちの知ったこっちゃ無いって立場の
つもりです。

折れ自身は、JPEGの表示がしたいだけなのだから、マニュアルにJPEG以外は
表示させないで下さいとでも書いておけば、完璧だと思ふ。

いろんな意見モトム。
ちょっと板ずれかも。
0018デフォルトの名無しさんNGNG
コンソールアプリをShellExecuteExで起動させているの。
そやつを終わらせたい場合ってTerminateProcessしかない?
0019デフォルトの名無しさんNGNG
「アプリケーションの追加と削除」の「現在インストールされているプログラム」のリストをWindows2000+VC6で、
APIで取得するにはどうしたらいいでしょうか?名前やインストールフォルダ、日付などを取得したいのですが。。。

MSDNを眺めてみて、あてずっぽうでMsiEnumProducts→MsiGetProductInfoとやってみたら、
何故か一部のリストしか取得できませんでした。なんでこんな中途半端な結果が???
0020デフォルトの名無しさんNGNG
>>17 マニュアルにJPEG以外は表示させないで下さいとでも書いておけば

GIFの場合はユニシスが「その手はダメだよ」と言っていたような覚えがあるけど
ソースが出てこない・・・誰か覚えている人ソースキボンヌ。勘違いだったらゴメンネ
0021デフォルトの名無しさんNGNG
http://www.forest.impress.co.jp/article/2000/03/16/lzw_license.html
>IEコンポーネント利用のソフトは“消尽理論”で対象外
これかかげとけば十分なんじゃないの?
0022デフォルトの名無しさんNGNG
>>8
それで「も」も「表」も上手くいきました。
これで大丈夫・・・ですよね?他に落とし穴は無いかなぁ・・
0023JPEG特許問題NGNG
>>21

これ見る限りでは全然問題無さそうですね。

たしかに、OleLoadPicture関連はMSが特許料を払っているはず
とは思ってましたが、”消尽理論”てのは知りませんでした。

皆さんありがとうございました。
0024デフォルトの名無しさんNGNG
>>21のリンク先より引用
IEコンポーネント自身の正規の機能であり、こうした動作も了解した上でMicrosoft
とUnisysはライセンスを結んでいるはず。もし制限があるのならば、Microsoft側が
きちんと明示しておくべきで、それがないのであれば問題ないと解釈すべき。

逆にいえばMicrosoftが明示している場合は制限されてもしょうがない、
ということだが、KBのQ193543では、

However, this license does not extend to third-party developers using
Microsoft development products to develop applications. Third-party
developers must have a license from Unisys in the form of a written
agreement.

と明示している。
0025JPEG特許問題NGNG
な。逆に、特許料を払わねばならぬと明示されているのか・・?
0026デフォルトの名無しさんNGNG
>>17
だからユニシス社的にはって言ってるじゃん
いくら「コピー機を売ってる立場であり〜」などと主張しようが
ユニシス社的には特許権使用者に当たるから無意味
>>23
消尽理論の記事は「そういう理論が世の中に存在する」だけであって
だから特許料を払わなくても訴えられないということにはならんだろ
ユニシス社のある米国でなく日本の、弁護士でなく一弁理士の発言を
支持するのは一向に構わんが相応のリスクを負うことにはなる

>>22
素直に GetFullPathName() 使った方が良いんじゃない?
0027デフォルトの名無しさんNGNG
GIFが問題だったら、
数バイトだけチェックしてGIFだったら無視すれば。
0028JPEG特許問題NGNG
>>26殿
ラジャ サンクス

うーん。GIFって拡張子だけ排除しよ。
それ以上の努力が必要?
なら鬱。

JPEG特許問題でもっと鬱。

もはや板ずれ。スマソ 無意味じゃないけど。
0029デフォルトの名無しさんNGNG
>>19
それはインストーラに MSIを使ってるやつだけでしょう。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
の各キーの "DisplayName"と "UninstallString" を見てなんとかする
しかないんじゃないの?
0030デフォルトの名無しさんNGNG
>>18
コンソールが接続されてないとGenerateConsoleCtrlEventは
使えないんだっけ?
0031デフォルトの名無しさんNGNG
>>26
GetFullPathName()をどのように使うのですか?
これってカレントディレクトリをくっつけるんですよね?
0032デフォルトの名無しさんNGNG
著作権総合スレ立てておきましょうか?
0033.NGNG
>ファイル列挙するのに FindFileFirst&Next 使えって一体。

(;´Д`) ハゲシクドウイ。
0034デフォルトの名無しさんNGNG
>>29
サンクス。その方法で逝っときます。
0035デフォルトの名無しさんNGNG
>>32
それぞれスレが立っているから、使い終わってからにしてほしいけども。

ユニシス社のGIF問題についてマターリ語るスレ
http://pc3.2ch.net/test/read.cgi/tech/1012141575/
JPEG特許問題
http://pc3.2ch.net/test/read.cgi/tech/1027428839/
0036デフォルトの名無しさんNGNG
ゲームで画面全体をゲーム画面にできるものがありますが、
あれはどうやれば実現できるのでしょうか?
ChangeDisplaySettingsで画面の解像度を変更することはできたのですが、
クライアント領域が画面を覆うようにはなりませんでした。
MoveWindowを使っているのかとも思いましたが、それだとマウスカーソルを
画面上部に持っていってもメニューが表示されません。
どなたか教えてください。
0037JPEG特許問題NGNG
GIFの判定にファイル拡張子を使用するのは糞だと思ったんで、
面倒でもヘッダを見て判定しようと思ったんですが、ファイルの先頭に
"GIF"って書いてたらGIFファイルだと判定しても可ですか?
"GIF"って書かれたテキストにも引っかかりますが、そんな鬱な
テキストも滅却。
0038デフォルトの名無しさんNGNG
>>36
ChangeDisplaySettingsで一時的に画面の解像度を変えるのはご法度。
どんな解像度でも動くようにするか素直にDirectX使え。
0039デフォルトの名無しさんNGNG
一時的に変えるのがご法度ならCDS_FULLSCREENとか
CDS_UPDATEREGISTRYとかわざわざフラグとして存在しないと思うのですが。
嘘ではないけど何か重要な説明をはしょったりしていませんか?
0040デフォルトの名無しさんNGNG
>>36
枠線なしにしてウインドウのサイズを画面と同じにして
一番上に表示
ではいけないの?
0041デフォルトの名無しさんNGNG
>>37
すべてデコードしてみて成功したらGIFファイルであるとみなす。
100%誤判定はないが判定した時点ですでに特許に抵触してるという罠
0042デフォルトの名無しさんNGNG
>>40
ウィンドウスタイルをWS_POPUPにして、
クライアント領域が画面全体を覆うように、ウィンドウの位置・サイズを
変更してみたのですが、そうするとメニューが使用できませんでした。
(メニューは画面外に位置)

ゲームではよく、普段メニューは表示されていなくても、
マウスカーソルを画面上部に持っていくと、メニューが現れますよね?
ああいう風にしてみたいと思ったのですが。
0043デフォルトの名無しさんNGNG
そのメニューってWindows標準のメニュー?
0044デフォルトの名無しさんNGNG
>>42
そりゃそのままじゃ使えないでしょ。
WM_MOUSEMOVEを捕まえて、ウインドウ上部(つまりこの場合は画面上部)
にきたらメニュー表示するようにすればいいのでは?
004540=44NGNG
補足
ウインドウごと動かすと、ウインドウの中身も動いちゃうので、
メインウインドウはメニューなしにして、
メニューだけのウインドウを別に持つのがいいかも。
0046デフォルトの名無しさんNGNG
それって、非圧縮GIFが使えなくならね?
0047デフォルトの名無しさんNGNG
>>45
なるほど。ありがとうございます。
その方法で試してみます。
0048デフォルトの名無しさんNGNG
>>39
嘘だと思うなら、やってみれば。

確かに解像度は変えられるが、戻ったときに「うげ」となるから。
0049デフォルトの名無しさんNGNG
フルスクリーンな話
http://home7.highway.ne.jp/nomura_y/prog000.htm
0050デフォルトの名無しさんNGNG
Win2k系ではChangeDisplaySettingsを使うと、
各ウィンドウの位置・サイズがおかしくなるみたいですね。
ちなみにうちの98SEの場合は問題ありません。
0051デフォルトの名無しさんNGNG
>>48
だからCDS_FULLSCREENがあるんだろ
環境次第だというならうちのWin2kではDirectX使っても
ウィンドウが勝手に移動しますが何か?
0052デフォルトの名無しさんNGNG
>>51
> うちのWin2kではDirectX使ってもウィンドウが勝手に移動しますが
後始末はしっかりやってる? 俺の環境でも、後始末のタイミング次第で
ウィンドウサイズが復元されない場合があった。
0053デフォルトの名無しさんNGNG
3D迷路のスクリーンセーバーってどうやって解像度切り替えてるの?
Dependency Walkerで見る限りでは明らかにChangeDisplaySettings
使ってるのにWin2kでもウィンドウサイズおかしくなったりしないんだけど
0054デフォルトの名無しさんNGNG
どうしても自前のソート関数で並び替えをしたくて、
オーナー描画のコンボボックス(ドロップダウン)を作ったのですが、
リストから選択すると、テキストボックスに変な文字列が表示されます。
恐らくコンボボックスがテキストだと思ってアイテムデータのアドレスを
テキストボックスに渡しているのだと思うのですが、
CBS_HASSTRING をつけると WM_COMPAREITEM 飛んでこないし、
何かいい方法はないでしょうか?
というかそもそも作り方間違ってます?
0055デフォルトの名無しさんNGNG
内部でソートして、全部挿入しなおしたらええんとちゃう?
005654NGNG
>>55
うーん、できればリアルタイムにソートしたいんですよね。
表示のたびに挿入し直しは無駄が多いような気がするので。
でも何となく雰囲気的に無理っぽい感じですね。

とりあえずソートしつつ挿入という方式でやろうと思いますが、
もしいい方法があったら引き続き情報お待ちしておりますので
よろしくお願いします。
0057デフォルトの名無しさんNGNG
あちしがListViewでやったときは、そんなに速度は変わらなかったけど?
(ただし、挿入ではなく上書きを使ったけどネ)
0058デフォルトの名無しさんNGNG
質問。
かなりレベルの低い質問で恐縮なのですが
ウインドウの背景を青にして
そのウインドウにTEXTOUT関数で文字を出力すると
文字が白い四角の中に表示されてしまいます。
どうすれば青い背景の上に文字を表示できるでしょうか?
よろしかったらお教えください。
0059デフォルトの名無しさんNGNG
>>58
SetBkMode( hDC, TRANSPARENT );
0060デフォルトの名無しさんNGNG
レスありがとうございます。
なるほど、TRANSPARENTっていう指定が
背景をそのまま残すっていう指定になるんですね。
参考になりました。ありがとうございました。
0061デフォルトの名無しさんNGNG
ListViewのエディット機能が非常に使いにくいのですが
(エクスプローラで名前の変更で使うみたいな)
エクセルみたいに軽快にEditを使いたいのですが
どうすればいいんでしょうか?
0062デフォルトの名無しさんNGNG
SHPathFromIDList
の逆で
パスからIDListに変換するのに
使用するAPIって存在しますか?
あるなら教えていただきたいのですが。
IDListについていまいちきちんと理解していないので、
見当外れなら指摘してもらえると助かります。
よろしくでお願いします。
0063デフォルトの名無しさんNGNG
起動している任意のアプリが、ダイアログかどうかを判断
するにはどうしたらよいのでしょうか?
0064デフォルトの名無しさんNGNG
「アプリがダイアログかどうか」ってどういう意味よ。
0065デフォルトの名無しさんNGNG
そのウインドウにWM_SIZEを送って大きさが変わるかどうか、ってのはどうだ?
006663NGNG
>>64-65
表現が曖昧ですいません。
考え直してみたところ、判断したいのはダイアログではなくて
ウィンドウのサイズ変更ができないアプリであり、これはウィンドウスタイルに
WS_THICKFRAMEが含まれているかどうかを判定することにより解決しました。
0067デフォルトの名無しさんNGNG
クラスのメンバ関数をウィンドウプロシージャにする方法はないでしょうか?
単純に、

WNDCLASSEX wcex;
wcex.lpfnWndProc = (WNDPROC)(this->WndProc);

とするとコンパイルエラーになってしまいます。(型変換できないと言われる)
(static関数にすればコンパイルできますが、thisを参照できないので
 困ってしまいます)
0068デフォルトの名無しさんNGNG
>>67
SetProp()でウィンドウハンドルにthisを登録すれば何とか使えます
WM_CREATEの時点では使えませんけどね
006968NGNG
>>67
捕捉、
http://techtips.belution.com/ja/vc/0009/
↑に詳しくのってた
0070デフォルトの名無しさんNGNG
>>68-69
これでうまくいきそうです。
紹介いただいたサイトもお気に入りに追加しました。
ありがとうございます。
0071デフォルトの名無しさんNGNG
OutputDebugString()の出力を表示するプログラムを作りたいんだけれど、
どこかにソース or 情報ありませんか。

(すれ立てるまでもない質問はここでに同じことを書きましたがスレ違い
でした。すんまそ。)
0072ssssssNGNG
>>71
0073ssssssNGNG
>>71
デバッガを作りたいということ?
VC++使ってりゃデバッグウインドウにそのまま表示されるけど、それじゃだめなの?
0074デフォルトの名無しさんNGNG
>>73
その、表示が出るVC++のデバッグウィンドウの部分だけを
独立したソフトとして作りたいのです。
0075デフォルトの名無しさんNGNG
>>71
MFCのソースで見たことあるな。
EditWindowを作って、新たに表示させる文字列を
REPLACEなんとかで文章の最後に置き換える形で追加していく。
0076ssssssNGNG
>>74
ほれ
http://www.anticracking.sk/EliCZ/import/msdn_debug.htm
サンプルビルドしてみたけど、うまくいかん…
がんばってくれ。
0077ssssssNGNG
>>76
これも
http://nps.vnet.ee/ftp/Docs/Asm/IczTutor/tut28.html
0078デフォルトの名無しさんNGNG
>76-77
ありがとうございます。
そろそろ終電だからその資料印刷して帰ろう。。。
007978NGNG
今本棚を漁ったら、日経BPのwindowsプログラマのためのデバッグテクニックという本
にもヒントがありました。
0080ssssssNGNG
>>78
残業中かよ!
0081デフォルトの名無しさんNGNG
>>62
IShellFolder::ParseDisplayName()
008262NGNG
>81
ありがとうございます。
早速試してみますね。
0083デフォルトの名無しさんNGNG
ツールバーをサブクラス化してもサブクラス化ルーチンにWM_COMMANDが飛んでこないのですが、そういうものなんでしょうか?
0084デフォルトの名無しさんNGNG
ツールバーの親
008583NGNG
>>84
ボタンコントロールとかをサブクラス化した場合はサブクラス化ルーチンにWM_COMMANDが飛んでくるのにと思ってました。
激しく勘違い。何をサブクラス化してもWM_COMMANDは来ないのですね。

ところで、なんでサブクラス化ルーチンにWM_COMMANDが来ないのでしょう?
サブクラス化の意味が違う?
0086デフォルトの名無しさんNGNG
Win32APIってC言語で記述できるって聞いたけど、どうなの?
0087デフォルトの名無しさんNGNG
>>86 DLLを呼び出す為の仕掛けがC言語自体にはありませんから
  その部分を別にリンクする事で可能になります。

世の中にはDelphiとか そういう機能を内在した言語もあります
0088デフォルトの名無しさんNGNG
>>85
何でサブクラス化したいん?
0089デフォルトの名無しさんNGNG
したいから
009083NGNG
>>88
複数のアプリで同一のツールバーを使う場合、ツールバーをDLL化して、ツールバーが押された時の処理もDLL側で行った方がすっきりして良いかと思いまして。
EXE側もツールバーの事を意識しない方が楽ですし。
0091ssssssNGNG
>>85
サブクラス化云々の問題よりも、
そもそもWM_COMMANDはボタンコントロール(のウインドウ)に送られるメッセージではなく、
ボタンが押された結果他のウインドウ(親ウインドウ)に送られるメッセージだからでしょ。
だから、ボタンにWM_COMMANDが送られるわけはない。
0092デフォルトの名無しさんNGNG
どういうツールバーよ
0093デフォルトの名無しさんNGNG
Windows2000のタスクマネージャのように、起動中のアプリケーションの
タイトル名とアイコンを取得しようと思ったのですが、Delphiなどで
作られた一部のアプリケーションは二つのウィンドウが取得されてしまいます。
(例えばクラス名TApplicationとTFormMainの二つ)
しかもこの二つのウィンドウのアイコンが別々です。

そこで、タスクマネージャのように一つだけ取得し、なおかつアプリケーションの
正しいアイコンを取得するにはどうすればよいのでしょうか。
0094デフォルトの名無しさんNGNG
>>93
でそれらのウィンドウの関係は?
009583NGNG
>>91
サブクラス化って、サブクラス化したウィンドウに関する全てのメッセージを処理するものだと思ってたのです。
WM_COMMANDは仰る通り、考え方が違うのですね。

>>92
主にランチャー機能やタスク切換え機能ですね。
ヘルプ起動とかも行っていますが、これもランチャーに相当すると言えるかも。

あまり深く考えずに親ウィンドウ側でWM_COMMANDを処理してもいいんですが、各EXEに同じようなのを記述するのはいかがなものかと。
その部分だけ別ソースに書き出して工夫するのが良いのでしょうか?
0096デフォルトの名無しさんNGNG
>>95
ランチャーの機能に関する一連の関数、又はクラスをDLLの方に閉じ込めて
親ウィンドウのProcedureから呼べば?
0097デフォルトの名無しさんNGNG
そのためのREFLECT_NOTIFICATION()。
親から子にメッセージを投げ返せ。
0098デフォルトの名無しさんNGNG
>>95=83
>サブクラス化って、サブクラス化したウィンドウに関する全てのメッセージを処理するものだと思ってたのです。

きみはウィンドウ関数(プロシージャ)というものちゃんとを知らないんだね。
0099デフォルトの名無しさんNGNG
>>93

GetWindow(hWnd,GW_OWNER) でゼロを返すほうが真のメインウィンドウ
0100デフォルトの名無しさんNGNG
>>71
dbmonのソース。
Platform SDKに入ってると思う
010183NGNG
>>96
親で受け取ったWM_COMMANDがツールバーのものなのか判定するというのがいかがなものかと思いまして。

>>97
REFLECT_NOTIFICATIONで解決かと思ったのですが、使い方が分かりません。
しかしプラットフォームSDKの標準ヘッダーでは定義されていないですね。
MSDNを見ていたらATLマクロだということは分かりましたが、SDKなプログラムにREFLECT_NOTIFICATIONのみを実行させることは可能なのでしょうか?

>>98
はい。残念ながら知らないようです。
私の抱える問題を解消出来るような方法は御存じないでしょうか?
010296 NGNG
>>101
はて、そのこころは?
010383NGNG
>>102
複数のEXEで同様な判定処理を行う事になるからです。
大した事ではありませんが、見た目上、同じツールバーを備えるEXEでも、EXE側での処理如何ではツールバーの動作が異なる可能性が出てくるためです。
今回、私の作っているツールバーでは、主にランチャー機能を持たせる訳ですから、EXE側にとってはツールバーの処理は無関係な訳です。

今のところ、ツールバーをサブクラス化したルーチンで、WM_LBUTTONUPの処理時にTB_ISBUTTONPRESSEDを使ってツールバーのどのボタンが押されたか調べる事が出来ましたので、他に良案が無ければこの方法でいこうかなと思います。
010483NGNG
>>102
ちょっと書き方に不備がありましたね。すみません。

>複数のEXEで同様な判定処理を行う事になるからです。

つまり結局の所、[各EXEのWM_COMMANDでLOWORD(wparam)==ツールバーのボタンか?]の処理が必要になるのが如何なものか? ということです。
0105102 NGNG
>>104
私個人としては、
「ウィンドウプロシージャに飛んで来るWM_COMMANDの振り分け」自体面倒な処理では無いと思うが..

case WM_COMMAND:
switch (LOWORD(wp)) {
case ID_TOOLBAR:
OnToolBarMsg(hWnd, msg, wp, lp);
break;
....
とかじゃダメなの?

WM_LBUTTONUPだとウィンドウ外でクリック->ホールド->ツールバーの上でリリース
でもイベントトリガーに...
0106デフォルトの名無しさんNGNG
>101
だから、REFLECT_NOTIFICATIONマクロと
実質的に等価なコードをかけや。
010783NGNG
>>105
case WM_COMMAND:
switch (LOWORD(wp)) {
case ID_TOOLBAR:

この場合、LOWORD(wp)にはツールバーリソースIDではなくてボタンIDが入りますので、ボタンが複数あるとcase文を増やさねばなりません。
もちろん、面倒ではないですが。

>WM_LBUTTONUPだとウィンドウ外でクリック->ホールド->ツールバーの上でリリース
>でもイベントトリガーに...

ある意味、そのような操作をすると無駄なイベントは発生してしまいますが、TB_ISBUTTONPRESSEDを使ってツールバーのどのボタンが押されたか調べているので、実質的には問題は無いでしょう。

>>106
そのマクロと等価なコードがどんなものなのか分からないのです。
単にWM_COMMANDをツールバーに投げるだけですか?
0108 NGNG
>>103
DLLでツールバーとその親ウィンドウを作って、EXEには
親ウィンドウを張り付けりゃいいんでないの?
010983NGNG
>>108
そういう手がありましたね。一番素直な組み方かも。
フローティングツールバーみたくする時も、この方が応用が効いて良さそうです。
ありがとうございます。
0110デフォルトの名無しさんNGNG
変な設計
011183NGNG
変ですか?
0112デフォルトの名無しさんNGNG
普通親子が別ウィンドウになったりはしない
0113112NGNG
ごめん勘違い
0114CRectNGNG
あのー超初心者質問でスマンす。VC6 win32アプリ作成,標準で

#include <windows.h>
#include "StdAfx.h" だけだと

CRect

が”定義されてません”のエラーになるんですが,
これは何をインクルードすれば使えるんでしょうか。

--------------------構成: a7 - Win32 Debug--------------------
コンパイル中...
a7.cpp
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\MyProjects\a7\a7.cpp(24) : error C2065: 'CRect' : 定義されていない識別子です。
0115デフォルトの名無しさんNGNG
RECTじゃだめなの?
0116デフォルトの名無しさんNGNG
atltypes.hです
MSDNに載ってるぞ
0117デフォルトの名無しさんNGNG
なんでWin32APIスレで(゜Д゚)
0118CRectNGNG
ですね。
それつかうんならSDKじゃないとやっと気付いた私。ごめ。
0119デフォルトの名無しさんNGNG
ところで stdafx.h って何やってるファイルなの?
コンソールアプリ作る分には windows.h 読んどきゃ OK っぽいけど...
0120デフォルトの名無しさんNGNG
MSDN読んだ?
0121デフォルトの名無しさんNGNG
>>119
プリコンパイル済みヘッダファイル作成用だと思う
0122デフォルトの名無しさんNGNG
親のウインドウの中にCreateWindowで、
リストとエディットを作ったんだけど、その二つは横に並べるのね。
そんでお互いに接してる部分だけサイズ変更ってどうやるんでしょう?
↑エクスプローラのフォルダ表示エリアとファイル表示エリアみたいな関係にしたいのです。
 フォルダ表示エリアの幅を広げると、ファイル表示エリアの幅が狭くなるって感じで。
CreateWindowのスタイルでWS_SIZEBOXとかやると、
4辺全部変えられるようになっちゃうし。
教えて下さいー。
0123デフォルトの名無しさんNGNG
>>122
IEのフレームみたいなのか?
あれはMFCではできるけどAPIだと自力でどうにかしろだったと思うが。
0124デフォルトの名無しさんNGNG
GetWindow(hWnd,GW_OWNER)で0を返すウィンドウのリスト(タスクマネージャのような。)
を作り、それぞれのウィンドウのサイズやZオーダーを変更したり最小化・最大化しようとして
それぞれのウィンドウへSendMessageしたのですが、最小化などはできるのですが
サイズ変更やZオーダーは変更できないウィンドウがあります。
具体的にはDelphi製のソフトが該当するようなのですが、
Zオーダーなどの変更方法としてこの方法は間違っているのでしょうか?
間違っているのならどのような方法をとればよいのでしょうか?
0125デフォルトの名無しさんNGNG
Delphi製のソフトって、目に見えているウインドウが最上位のウインドウではなく、
その上にもう一つウインドウがある。
0126デフォルトの名無しさんNGNG
Delphi製アプリは不可視のトップレベルウィンドウとそれに所有される
メインフォームという構造になってる
たぶんその関係では?
0127126NGNG
>>125
式はいつにしますか?
0128124NGNG
不可視ウィンドウから可視ウィンドウ(メインフォームウィンドウ?)を
取得するにはどうすればよいのでしょうか?
0129デフォルトの名無しさんNGNG
>>127?
0130124NGNG
内容がかぶったのでケコン→ケコン式はいつにしますかということだと・・・

不可視ウィンドウとはクラス名TApplicationというやつぽいですが
これ以外の同キャプションをメインフォームと判断するのは
ちょっと乱暴なやり方でしょうか・・
0131デフォルトの名無しさんNGNG
別ユーザとして他のプロセスを起動したいんですが、LogonUser()でうまくいきません。

LogonUser( TEXT( "Administrator" ), TEXT( "." ), TEXT( "password" ),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken );

こんな感じなんですが、どうですか?
0132デフォルトの名無しさんNGNG
>123
そうですねー。
IEのフレームみたいなやつ。
APIでは対応してないのですかー・・・
MFCってさっぱりわからんのであきらめますかな・・・
どーもでした。
0133122NGNG
上の132は122でした。
しつれーい。
0134デフォルトの名無しさんNGNG
>>132
左右のウィンドウの間にフレーム用のウィンドウを作る。
そのウィンドウがドラッグされたら左右のウィンドウのサイズを調整。
0135デフォルトの名無しさんNGNG
>>130
列挙して不可視ウィンドウがオーナーになってる奴を探す
0136デフォルトの名無しさんNGNG
>>131
起動元のユーザーはTCB特権を持っていますか?
0137デフォルトの名無しさんNGNG
>>136
TCB特権って何ですか?
調べてみたんですけど、それらしいものがでません。。。
0138デフォルトの名無しさんNGNG
>>13
これじゃないの? 手元の MSDN Library だと LogonUser() API の解説に
書いてあったんだが。
> LogonUser 関数を呼び出すプロセスは、SE_TCB_NAME 特権を備えて
> いなければなりません。

ついでにサポート技術情報から。

> 注意: ユーザー マネージャ [原則] - [ユーザーの権利] で、高度なユーザー権利の
>     [オペレーティングシステムの一部として機能] をユーザーに許可することで
>     上記の権限をユーザーに持たせられます。
0139デフォルトの名無しさんNGNG
ちなみにむやみに特権を付加するのはセキュリティの問題があるからな。
SE_TCB_NAMEを付加するくらいだったら最初からAdministrators
与えとけよというくらい危険
0140138NGNG
>>139
話が逸れるんだが、Win32 の特権について詳解している書籍とかって知ってる?
MSDN Library にはパラパラとは書いてあるんだが、全体像を把握しかねてて。
0141デフォルトの名無しさんNGNG
DelphiのTApplicationウィンドウは可視という罠
0142デフォルトの名無しさんNGNG
質問なのですが
Sleep関数の精度っていうのはどの程度なのでしょうか?
どうも1ミリ秒単位で正確ではないようなのですが。

やはり正確さを取るには
for(dwTime=timeGetTime()+10; timeGetTime()<dwTime; Sleep(0));
のようにするか、for文の中でQueryPerformanceCounterを回して
時間の差を判定するしかないのでしょうか。

でも、こうするとやたら重くなるのでできればSleepのような軽い関数が
あればいいなぁ・・・
0143デフォルトの名無しさんNGNG
timeGetTime()だってSleep()と同じ精度だろ。
0144ssssssNGNG
>>122
今回の場合に使えるかどうか分からないけど、
WM_NCHITTESTを処理すれば、
特定の辺だけサイズ変更できる(マウスでドラッグできる)
ってことができるんじゃないかと思います。
0145デフォルトの名無しさんNGNG
>>142
 正確な時間を何の為に欲しいの? 
Win32アプリだと QueryPerformanceCounterを使っても スレッドが割り込まれると駄目だしさ
0146YahooBB237224045.bbtec.netNGNG
100万回は既出だと思いますが,jpg画像 を表示
する段取を初心者用に
書いたアーティクルはないもんでしょうか.
「猫でもわかる」その他検索しましたが見つけられません.
スージプラグインとか必須ですか?
0147142NGNG
>>143
違います。
timeGetTime()は1ミリ秒ですが
Sleepは最低5ミリ秒くらいの精度になります。

>>145
ある一定の間隔でポートから出力したいんです。
±0.1ミリ秒程度の精度が欲しいのですが、やはり無理なのでしょうか。
0148デフォルトの名無しさんNGNG
>>142
RDTSC
0149デフォルトの名無しさんNGNG
>>146
http://www.google.co.jp/search?q=StretchDIBits+jpeg

>>147
 殆ど使われてない マザーのbeep機能を使ったらどう?
0150JPEG特許問題NGNG
>>146
前スレでOleLoadPicturePathを教えてもらいますた。
環境により使用関数は変わりそう。
0151デフォルトの名無しさんNGNG
メモリを追加/解放したい時って VirtualProtect で
要求サイズを変更すればいいんでしょうか?
その場合元のメモリの内容は保障されてるのでしょうか?
よろしくお願いします。
0152デフォルトの名無しさんNGNG
いっそのことDirectMusicのアレを使うとか。重いが。
01531NGNG
d
0154デフォルトの名無しさんNGNG
>>146
JPEGは特許がやばいからやめとけ。
0155 NGNG
>>151
悪いことは言わないから、おとなしくmalloc/freeを使っとけ。
0156DELLNGNG
図形を移動させる方法を教えてください。
VBの場合ならshape1.move x,y でできましたが、

APIはRectangle(hdc,x,y,x+10,y+10);
をどこのプロシージャで使えばいいか分かりません。

しかも上記のアルゴリズムでは移動するということではなく、
次々と新規に描かれていくように思えます。

だれか図形を移動させる方法教えてください。
0157デフォルトの名無しさんNGNG
>>155
VirtualProtectってCなの?
C++ならnew/deleteだと思われ
0158デフォルトの名無しさんNGNG
>>157
きみはこのスレで何を言ってるのかね
0159デフォルトの名無しさんNGNG
SetWindowRgn() では WM_PAINT が発生しますか?
もしそうだと case WM_PAINT: でこれをつかったら
∞ループにはまりますよね.
0160デフォルトの名無しさんNGNG
日本では拒絶されるらしいって書いてるけど
http://www.matsusaka-u.ac.jp/~okumura/compression/jpegpat.html
0161151NGNG
>>155
いぢわるしないで教えてください。
malloc/free に当たる処理を作りたいんです。

>>157
realloc に当たる処理が無いですけどね < new/free
普通は std::vector 使うから。


というか VirtualAlloc が成功しないです…。
何が悪いんだろう…
とりあえず某 VB のサイトにあった引数を参考にして試してるのですが…。
VirtualAlloc (NULL, 4096, MEM_COMMIT, PAGE_READWRITE | PAGE_NOCACHE );
環境は Windows2k です。
アドバイスお願いします。
0162デフォルトの名無しさんNGNG
RegisterClassに渡すウィンドウクラスの名前は、全角文字でも問題ないですか?
もしかしたら、NT系/非NT系によりますか?
0163デフォルトの名無しさんNGNG
> SetWindowRgn() では WM_PAINT が発生しますか?

最後のパラメータを false にすると発生しないと思う

> もしそうだと case WM_PAINT: でこれをつかったら

普通、そんなに頻繁にウィンドウリージョンを設定しないだろ
0164デフォルトの名無しさんNGNG
>>162
普通そんなこと誰もしない=誰も知らないバグが残ってる可能性がある
やめとけ。
0165デフォルトの名無しさんNGNG
>>161
ノーキャッシュをはずしたらどうよ?
0166デフォルトの名無しさんNGNG
>>161
PAGE_NOCACHE
が怪しい。こんなものはまず使わん。
0167166NGNG
またケコーン…
0168165NGNG
>>167
たいせつにするよ。
0169151NGNG
>>165, >>166
ケコーンおめでとうございます。

ちょっと簡略化の為に嘘書いてました。
要求サイズをページサイズ分に切り上げる処理を書き間違ってて
中途半端なサイズを要求していた事が原因でした。

で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
0170コギャルとHな出会いNGNG
http://kado7.ug.to/net/


朝までから騒ぎ!!
   小中高生
 コギャル〜熟女まで
   メル友
  i/j/PC/対応

女性の子もたくさん来てね
  小中高生大歓迎です                 
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。

  激安携帯情報あります。
0171 NGNG
>>169
どうやっても無理。おとなしくmalloc/free使っとけって。
0172デフォルトの名無しさんNGNG
>>169
自分ででっかいプールをつくったら?
0173151NGNG
>>171
やっぱり Heap系じゃないと増分は無理なんですか?
そういう書き方だと教えてくれてるのか煽りなのか区別がつかないもので…。

>>172
でっかいプールを作るのに VirtualAlloc を使いたいんですよねー
0174デフォルトの名無しさんNGNG
前スレでマウスの変位が右から左にどんどん移動するような
グラフを書きたいといって、
右端で直線を引きながら
BitBlt(memdc, 0, 0, 520, 460, memdc, 1, 0, SRCCOPY);
(memdcは裏画面のデバイスコンテキスト)
というようにすれば右から左に流れるような直線が書けると
教えていただいたのですが、これだとやはり時間がかかってしまいます。
何か高速な画面の移動の方法は無いでしょうか。
0175デフォルトの名無しさんNGNG
>>174
XOR
0176デフォルトの名無しさんNGNG
>最後のパラメータを false にすると発生しないと思う

なるほろ.
しかしそれではせっかく設定したリージョンが..

0177デフォルトの名無しさんNGNG
>>175
早レスありがとうございます。

XORっていうのは、
LineToを呼んで、背景色と色AのXORの色Bで直線を描画して、
今度は色Bの上から色Aで描画すれば背景色に戻る
っていうので合ってるでしょうか?

LineToを何度も呼ぶことになると思いますが、その方が高速なんでしょうか。
0178 NGNG
>>173
煽っているつもりは全くないのだが。
VirtualProtectはメモリの保護モードを変更するものなので、
サイズを変更することはできない(てか、ヘルプ読めよ)。

unixのbrkのような使い方をしたいのであれば、
あらかじめVirtualAllocで巨大な領域をreserveしておいて、
必要になった時点でcommitすることで、似たような動作にすることはできる。
0179162NGNG
>>164
そうですかぁ。(しょっく)

めんどくさいので、最初のウィンドウを作成するときに、そのウィンドウのタイトルで
ウィンドウクラスを登録しようかと思ったんですが。
0180 NGNG
>>164
単にクラスを識別するだけの役割しかないのに、
文字列の内容が関係すると思うか?
0181デフォルトの名無しさんNGNG
>>173
増やすときに、VirtualAllocの lpAdressに、予約済み領域の直後のアドレスを
指定(ページ境界に注意)してやればいいのでは?
0182デフォルトの名無しさんNGNG
>>162
試してみりゃ分かるやろ。
0183デフォルトの名無しさんNGNG
>>138,>>139
ありがとうございます。とりあえずいけました。
0184151NGNG
>>178
> サイズを変更することはできない(てか、ヘルプ読めよ)。
「要求するメモリのサイズ」って書いてあった(VirtualAllocで指定したサイズでなければいけないとは書いてなかった)ので
変更は可なのかなー等と思ってしまいました。

> あらかじめVirtualAllocで巨大な領域をreserveしておいて、
> 必要になった時点でcommitすることで、似たような動作にすることはできる。
なるほろ!これは気がつきませんでした。
ありがとうございます。

>>173
ありがとうございます。その手もありますね。
しかしライブラリ等の弄れない部分がOSからメモリー割り当てしてると失敗してしまいますね…(当たり前ですけど)

ポインタ比較に意味無くなってもいいからヒープ毎に独立したアドレス空間欲しぃ…。

とりあえず >>178 さんのアドバイスを元に頑張ってみようと思います。
皆さんありがとうございました。
0185デフォルトの名無しさんNGNG
>>174
ScrollWindowとかScrollDCとか
0186DOSっていいなNGNG
DOSの時代にはEMMやバンク切り替えっていうのがありましたが、
これと同じようなことをWindowsからできないのでしょうか。

別プロセス空間に2Gバイト近くのメモリーをそれぞれ確保しており、合計で
6Gバイト以上のアドレスを確保しています。この別プロセスのメモリーを共
有メモリーでランダムアクセスしたいのですが、
1:OpenProcessからReadProcessMemory, WriteProcessMemoryでは一旦コピー
  してからのアクセスになるためランダムアクセスに向きません
2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ
  トに限定されるため、大量に取得したメモリー全部にアクセスすることがで
  きません。
別プロセスのメモリー空間のポインタを取得する(実アドレスに割り当てる)
APIってないでしょうか。
0187デフォルトの名無しさんNGNG
>>186
6Gの仮想メモリで何がしたいねん?
結局は単一の物理メモリやん。
0188デフォルトの名無しさんNGNG
> 合計で6Gバイト以上のアドレスを確保しています

win32でできたっけ?
0189 NGNG
>>186
VirtualAllocVlmとか。
0190DOSっていいなNGNG
>>188
各プロセスはリニアに32ビット(4Gバイト)のアドレスしかアクセス
できませんが、(実際はOSの都合で2Gバイトしか確保できない)
別プロセスではそれぞれのセレクタが別の物理メモリー空間をアドレス
するようになります。
この辺はOSの仕事ですが、実際に確保できてしまいます。

>>186
たとえば、スキャナからの画像を9600BPIでA3全体を読み込むと
数Gバイトになります。もちろん今作っているのは、こんな馬鹿
みたいなこととは違いますが。。。

0191デフォルトの名無しさんNGNG
>>190
OSのメモリ管理限界より、実メモリが増えてなきゃ、
そもそも意味がないだろ。
0192DOSっていいなNGNG
>>191
確かに。
メモリーは誰かが金出して、10Gバイトくらい載るマザーボードと
メモリーを用意するだろう。

インテルCPUではFS,GSのセレクタレジスタが遊んでいるので、
それぞれ別空間をポイントできないかと考えたわけだ。
あるいは、OSからすれば、ページングで同じ物理メモリーを2つのプ
ロセスのリニアアドレスに割り当てればよいことで、簡単にバンク切り
替えができるのかと思って調べたが、見当たらなくてここで質問してい
ます。
0193デフォルトの名無しさんNGNG
>>169
> で、やっぱり VirtualProtect でサイズを変えることは出来ないんでしょうか?
MSDN Library を読んだ上で言ってるのか?

VirtualProtect は割り当てられたページの属性 (read/write/execute) を設定
する API。CPU がサポートする仮想記憶システムで使うデータベース(ページ
テーブルやディレクトリテーブル)の属性部分だけ仮想化したもの、といや良い
のかな。

俺も試したことはないんだが >>189 が言ってるように VirtualAllocVlm 系の
API を使うか、ファイルマッピング (CreateFileMapping) とかでどうかねぇ。

>>191
IA-32 だと、仮想記憶アドレスの限界以上の実メモリを使える。36bit PSE あ
たりのキーワードで検索すると出てくると思うけど。
0194DOSっていいなNGNG
ありがとうございます。
VirtualAllocVlmって、64ビットのアドレスが返るのですね。
Borland C++Builderを使っているのですが、どうやって使う
のでしょうか。
0195デフォルトの名無しさんNGNG
>>194
google で検索したら、トップで出てきたぞ…。
http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_virtualallocvlm.htm
0196デフォルトの名無しさんNGNG
>>175
特許は最近話題になったものだけにあるわけではないぞ
0197151NGNG
>>193
私の質問はもう終わってるんだけどな…。
直後に似た API の質問だから混同してもしょうがないけど。

でもやっぱり後でもう一回来てよかった。
なんかその Vlm ってのも調べてみようっと。

あと、>>178 さんに教えてもらったやり方でバッチグーに実装できました。
マジでありがとうございました。
0198151NGNG
で、調べてたら…。

http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_virtualallocvlm.htm

VirtualAllocVlm 関数は専用のリソースを割り当てるので、控えめに使ってください。
                                   ~~~~~~~~~~~~~~~~~~~~~~

↑ワロタ MS のドキュメントにしては珍しいあからさまに曖昧な表現。
0199デフォルトの名無しさんNGNG
>>186
>2:ファイルマッピングでメモリーファイルにすると、アドレス空間が2Gバイ
>  トに限定されるため、大量に取得したメモリー全部にアクセスすることがで
>  きません。

うそー?MapViewOfFile でマップするファイル位置を指定出来ただろ?64ビットで
0200デフォルトの名無しさんNGNG
複数のキーを同時に押しっぱなしにしていると
Windowsから警告音が来てしまうんですが、
これを止める方法はないでしょうか?
0201デフォルトの名無しさんNGNG
>>199
MapViewOfFileEx() の方かね。

いずれにせよ返ってくるのは LPVOID だから「大量に取得したメモリー全部に
アクセスすることができない」と思うが、そこは手作業でファイルマッピングの
切り替えだろう。

(狭い仮想アドレスを使い回す以上、バンク切り替え相当の手間が掛かるのは、
仕方ないよな)
0202デフォルトの名無しさんNGNG
AdministratorじゃないユーザからAdministratorでないといじれないレジストリのキーをいじるにはどうすればいいでしょうか?
0203デフォルトの名無しさんNGNG
>>202
犯罪の匂いがする
0204デフォルトの名無しさんNGNG
>>203
いえ、そういうのじゃないですよ。
レジストリの特定のキーを削除したいんです。
とりあえず今考えてるのはレジストリをいじるだけのプログラムを作ってお
いて、それを別ユーザとして起動すればいいかな〜って思ってるんですが、
もう少しスマートな方法がないかと思いまして。
0205デフォルトの名無しさんNGNG
>>204
> レジストリの特定のキーを削除したいんです。
なぜ?

一般論として言えば、Administrator しか削除できないキーを一般ユーザが削除する
のは(仮にできたら)、致命的なトラブルになるぞ。本当に必要なら、そのユーザに
ローカルマシンの Administrator 権限を付与するのが正道と思われ。
0206デフォルトの名無しさんNGNG
>>205
それでは、Administratorでない場合はどうでしょう?
他のアプリケーションの設定などを別ユーザからいじるということはできますか?
0207デフォルトの名無しさんNGNG
>>206
必要ならAdministrator権限をもらえって事だよ
そんな簡単に権限無視が出来るんじゃなんのためのユーザー管理だよ
0208デフォルトの名無しさんNGNG
ここですか、クラッキングツールを作ろうというスレは。
0209デフォルトの名無しさんNGNG
いえ、Administratorを要求するエロゲプログラマがいるスレです。
0210デフォルトの名無しさんNGNG
隠しAPIのNtQuerySystemInformationだけど、↓で安全に使えるのに気づいた。
ttp://support.microsoft.com/default.aspx?scid=http://www.microsoft.com/Japan/s
upport/kb/articles/JP253/0/66.ASP

だから何だと言われても困る。
0211デフォルトの名無しさんNGNG
微妙にスレ違いかもしれないですが。

Windows2000でファイルを選択してマウス右ボタンのプロパティから概要タブで
タイトルやコメントとかを設定できますけど、
あれってどこに記録されているのでしょう & 設定するAPIはあるのでしょうか。
0212デフォルトの名無しさんNGNG
http://www.ipa.go.jp/security/awareness/vendor/programming/b08_03_main.html
の下の方にある、福次ストリームを利用しているはず。
0213デフォルトの名無しさんNGNG
設定するAPIはOleなんとかかんとかというのがたぶんある気がする
0214デフォルトの名無しさんNGNG
>>211
詳しく調べてないけどたぶんIPropertyStorageを使うんだと思う
http://msdn.microsoft.com/library/en-us/stg/stg/ipropertystorage_ntfs_file_system_implementation.asp
0215デフォルトの名無しさんNGNG
動的にダイアログの中にダイアログ(コンテナ的な役割)を置きたいんですが、
ダイアログテンプレートで作成することはできますか?
なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、
ここにダイアログを直接置くことはできないんですか?
0216211NGNG
>>212-214
ありがとうございます、資料読んでみます。
0217StretchDIBitsNGNG
hBitmap = (HBITMAP)LoadImage(hInst, FileName,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
GetObject(hBitmap, sizeof(BITMAP), &bmp_info);
wx = bmp_info.bmWidth;
wy = bmp_info.bmHeight;
hdc_mem = CreateCompatibleDC(hdc);
SelectObject(hdc_mem, hBitmap);
StretchDIBits(hdc,0,0,wx, wy,
0,0,wx, wy,
pBits,&bmp_info,DIB_RGB_COLORS,SRCCOPY);

とした場合最終行のpBitsには"DIBのビットデータの先頭へのポインタ"
をいれるという説明なのですが,これはどうやって取得できますか?
0218API学くんNGNG
質問です。
リッチエディットコントロールをSDKのC言語で組もうとしてる者です。
EDITSTREAM構造体のdwCookieとpfnCallbackメンバを設定して、
EM_STREAMINメッセージでストリームにデータを送ってリッチエディット
コントロールに表示させるらしいという事がわかりました。
しかし実際に表示させようとしても、やり方がわかりません。
具体的に言うとchar goku[30]="こんにちは"という、メモリ上のデータを
表示させようとするときdwCookieに何を指定するのか分かりません。
es.dwCookie = (DWORD)goku;のように指定しても駄目でした。
ファイルを読み込んでそれを表示する事は出来るのです。
dwCookieにCreateFileで作成したhFileを指定すれば、ファイルの内容が
リッチエディットコントロールに表示されました。
es.dwCookie = (DWORD)hFile;
という感じで大丈夫でした。
ネット上で調べたのですが情報がありません。
メモリ上のデータをリッチエディットコントロールに表示するにはどうすれば
いいか教えて下さい。
0219デフォルトの名無しさんNGNG
>218
コピペじゃ駄目?
CHARRANGE cr;
cr.cpMin = cr.cpMax = -1;
SendMessage(hRich,EM_EXSETSEL,0,(LPARAM)&cr);
SendMessage(hRich,EM_REPLASESEL,0,(LPARAM)"こんにちわ");

SetWindowText(hRich,"こんにちわ");
でもいいかも。

参考→ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_130.htm
0220デフォルトの名無しさんNGNG
>217

StretchDIBits() → StretchBlt() じゃないの?
0221デフォルトの名無しさんNGNG
ダウンロードして見れるWin32APIリファレンスはありませんか?
0222デフォルトの名無しさんNGNG
>>221
Platform SDK にドキュメントついてきたと思うが。英語だけど。
0223API学くんNGNG
>>219
コピペという方法があったのですね。
リッチテキストを扱うからエディットストリームだという固定観念で調べてました。
普通のエディットコントロールも知らないで、いきなりリッチエディットを
作ろうとしたのが勘違いの元でした。
どうもありがとうございました。

0224APIビギナーNGNG
program 中から現デスクトップ画面のスクリーンショットをBMP
に落とすにはどんな方法がありますか?

0225デフォルトの名無しさんNGNG
GetDC(0)してお好きにどうぞ
2000/XPではCAPTUREBLTをお忘れなく
0226デフォルトの名無しさんNGNG
>>221
MSDNに入れば、「Subscriber Downloads」でダウンロードできるよ(藁
0227APIビギナー NGNG
>GetDC(0)してお好きにどうぞ
>2000/XPではCAPTUREBLTをお忘れなく

を,どうも.猫でもできる,を参考にしてやって見ます.

ところでウィン98だと選択の度にWM_PAINTで書きなおして表示されて
いた画像が,Xpだと全く更新されないままになるってのは
何が原因でしょうか.

0228デフォルトの名無しさんNGNG
動的にダイアログの中にダイアログ(コンテナ的な役割)を置きたいんですが、
ダイアログテンプレートで作成することはできますか?
なんかDLGITEMTEMPLATEの中はクラス名かIDが必要みたいなんですが、
ここにダイアログを直接置くことはできないんですか?
0229デフォルトの名無しさんNGNG
プロパティシートにするのが楽だとおもうのだが、、
0230 NGNG
VisualC++で保存したWin32APIを開いてビルトすると

"外部参照 1 が未解決です。"
みたいなメッセージがでてきてエラーになるんですが、
そのまま元に戻す方法だれか知りませんか?
0231デフォルトの名無しさんNGNG
>>230
取りあえず他のスレにまで迷惑かけるなって。
0232デフォルトの名無しさんNGNG
>>227
>>230
すまんが意味がまったくわからん。
もう少しわかりやすい日本語を話してくれ。
0233デフォルトの名無しさんNGNG
>>232
OSボム
http://pc3.2ch.net/test/read.cgi/tech/1029678513/l50

ここのネタだよ。気にしなくていい。
0234 NGNG
>232
日本語?
まぁお前ら天才だからこれくらいの日本語理解できるんとちゃうん?
お前は天才じゃなかったか。スマソ

>231->233
ここはWin32API質問箱だぞ?
スレに関係ない話題はやめろ荒らしめ
0235デフォルトの名無しさんNGNG
>>234
DELLさん、逆ギレですか?
0236DELLNGNG
>235
とにかく、230の質問が解ればそれでいいのだ。
隣でVisualC++開いている。
2chで問題が解決すれば得だろ?
0237デフォルトの名無しさんNGNG
>>236
図星でした。
0238デフォルトの名無しさんNGNG
>>236
お前さぁ、自分で考えて書いたんじゃなかったのか?なぜコンパイルできん?
また、

どこかで見つけたブラクラを書き込め!

系のこの板でもっとも頭の悪い部類に入るスレかよ・・・。
0239DELLNGNG
>238
お前さぁとか偉そうなこといってねぇで、
そのまま実行できんかったらコードを
新規作成したファイルにコピーすればコンパイルできることに気づけよ。

まぁ確かに俺の書いたコードは下らないものかも知れないが、
別にここはプログラム技術板なんだからブラクラより
マシだと思うぞ。
0240デフォルトの名無しさんNGNG
>>239
(劇藁嘲笑
0241デフォルトの名無しさんNGNG
どうせ、なんかのlibをリンクし忘れてるんだろ。
0242DELLNGNG
>241
なるほど参考になりました。
0243デフォルトの名無しさんNGNG
で見当はずれだったら自分の伝達能力を棚に上げてまた暴れるんだろーなー
0244DELLNGNG
>243
必死だな(藁
0245デフォルトの名無しさんNGNG
>>242
うわああああ
dumpbinも知らん
mlも使えない
スーパーDQNだぁぁぁぁ

HNのとおりデリられるべき香具師だな
0246デフォルトの名無しさんNGNG
GetDIBitsとSetDIBitsの第一引数で指定する
HDCについて教えてください。

hDC = GetDC( hWnd );
hDCMem = CreateCompatibleDC( hDC );
hBmp = CreateCompatibleBitmap( hDC, 64, 64 );
SelectObject( hDCMem, (HGDIOBJ)hBmp );

上のコードの後に、
GetDIBits( hDC, hBmp, … );
としても、
GetDIBits( hDCMem, hBmp, … );
としてもうまく動きます。これはどういうことなのでしょう?
HDCならなんでもいいのでしょうか?
(ちなみに、NULLだとうまく動きませんでした)
0247デフォルトの名無しさんNGNG
>>246
どういうことも何も、
hDCMemはCreateCompatibleDCで作ったんだから、
hDCと互換性があるに決まってる。

試したことないけど、
やっぱ、プリンタのHDCとか使ったら駄目じゃない?
0248246NGNG
>>247
動作に互換性があるのはわかるのですが、
>SelectObject( hDCMem, (HGDIOBJ)hBmp );
としているわけですから、
GetDIBits( hDC, hBmp, … );
でうまくいくのが不思議に思いまして。

GetDIBItsやSetDIBitsの場合、デバイスコンテキストに
設定した値(SelectObjectで指定したオブジェクトなど)は
全く影響なしということでいいのでしょうか?
0249247NGNG
>>248
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_getdibits.asp
によると、
「hbmp パラメータが示すビットマップが
デバイスコンテキストで選択されている場合、
この関数を呼び出さないでください」とあるんだが。

疑問の解消にはならないかも知れないが、
そういうことはしてはいけないらしい(逃
0250デフォルトの名無しさんNGNG
>>246さーん
CreateDIBSection() と同じで、DIB_RGB_COLORS である限りは HDC は
まったく参照されないんじゃなかったっけ? (HDC は NULL でいい)
0251デフォルトの名無しさんNGNG
すみません教えてください。
リストボックスに、文字を追加して行きたいと思い下記のようなコードを打ちました

SendDlgItemMessage( hWnd, IDC_LIST1, LB_ADDSTRING, 0, (LPARAM)Buff );

たしかに、文字はリストボックスに追加されたのですが、どんどん追加していくと
スクロールバーができ、入力している文字がリストボックスから見えない位置に
いってしまいます。
最後に出力した文字が、常に見える状態にするにはどうすればよいのでしょうか?
MFCだと、SetCurSel( m_ctl.GetCount()-1 );
でいいみたいなんですが、apiだとどうして良いのか、分かりません・・


0252デフォルトの名無しさんNGNG
>>251
そこまでわかっているならGoogleで
SendDlgItemMessage SetCurSel
で見つかる予感 ->
ttp://n76cd-01p05.ppp11.odn.ad.jp/old/a6050.html

これでいいんじゃないでしょうか。
0253デフォルトの名無しさんNGNG
VisualC++6 Pro SP5でCreateJobObjectがつかいたいのだけど
error C2065: 'CreateJobObject' : 定義されていない識別子です。
っていわれちゃう。
なんでだよヽ(`Д´)ノウワァァァァン

#include <windows.h>
#include <winbase.h>
#pragma comment(lib,"kernel32.lib")


int main(int argc, char* argv[])
{
        HANDLE hJob = (HANDLE)CreateJobObject(NULL, "testjob");


        return 0;
}
0254デフォルトの名無しさんNGNG
>>253
CreateJobObject は Windows 2000 以降の API だけど、
ちゃんとそれに対応した新しい Platform SDK 使ってるかね。
0255デフォルトの名無しさんNGNG
>>253

ヘルプに
>対応情報
> Windows NT: バージョン 5.0 以降を使います。
って書いてあるよね。

実行環境のWindowsのバージョンに依存するときは、
_WIN32_WINDOWSや_WIN32_WINNTというマクロが必要だよ。
↑
をヘルプで引いてごらん。


#define _WIN32_WINNT 0x0500
とか、
>Visual C++ 6.0: To specify compiler options,
>go to the Projects menu and click Settings,
>then select the C/C++ tab.
とか、することになってるよね。
0256デフォルトの名無しさんNGNG
>>249
>「hbmp パラメータが示すビットマップが
>デバイスコンテキストで選択されている場合、
>この関数を呼び出さないでください」とあるんだが。

あ、本当だ。見落としてました。(^^;

>>250
>CreateDIBSection() と同じで、DIB_RGB_COLORS である限りは HDC は
>まったく参照されないんじゃなかったっけ? (HDC は NULL でいい)

なるほど、HDCはパレットの情報を得るのに使っているんですね。
調べてみると、SetDIBitsのところにも、NULLでいいと書いてありました。
ところが、実際にNULLを指定すると、なぜかエラー(戻り値=0)が
返ってきます。他のパラメータが間違っているのかな???

GetDIBits・SetDIBitsの前後を調べてみることにします。
とりあえず、ありがとうございました。>>247 >>249 >>250
0257デフォルトの名無しさんNGNG
>>250
よく読め
>>246はNULLだとダメだったとちゃんと言ってるぞ
GDI関数で第一引数にHDCを取るものは
どのドライバを呼び出すか決めるためにHDCを使うんだから
この場合ディスプレイドライバが作ったHDCならなんでもいいけど
NULLはダメ
0258256NGNG
訂正:
>調べてみると、SetDIBitsのところにも、NULLでいいと書いてありました。

正確には、「無視されます」とあり、
「NULLでもいい」と書かれてあったわけではありませんでした。
失礼。
0259デフォルトの名無しさんNGNG
今までMFCを使っていました。
Win32APIだけで組めばプログラムのファイルサイズがかなり小さくなると
思ったのですが、実際にダイアログリソースを表示するだけの簡単なプログラムを
作ってみるとMFCで共通DLLを使ったものよりも大きくなってしまいました。
 MFC(共通DLL使用)→28KB
 Win32API→44KB
こんな具合です。
もうちょっと(せめてMFC版よりも)サイズを小さくするにはどうしたらよいのでしょうか?
0260デフォルトの名無しさんNGNG
>>259
必要な処理をDLLに持っていって本体はWinMain()のみにする。
0261デフォルトの名無しさんNGNG
MSVCRT.DLLを使うようにする。
0262デフォルトの名無しさんNGNG
>>259
サイズの比較になってねーぞ
 MFC(共通DLL使用)→28KB + sizeof MFC42.DLL
0263デフォルトの名無しさんNGNG

#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
keybd_event(VK_SNAPSHOT,0,0,0);
return 0;
}
昨日も聞いたんだけどサー,これでデスクトップのショットが取れないのはなぜ?
アクティブウィンドウしか取れない. alt 押してないのに.
証拠画面もうぷするか?
0264デフォルトの名無しさんNGNG
>>263
そんなことせんでもGetDC(0)したのをBitBltすれば良かろう。

つぅか誰にそのキーイベント送ってるのさ?
0265デフォルトの名無しさんNGNG
>>259
upx --best --crp-ms=100000 filename
とかどうよ?
0266デフォルトの名無しさんNGNG
>そんなことせんでもGetDC(0)したのをBitBltすれば良かろう

その通りなんですけど,キーコードがちゃんと送れてないのがげせない.
>誰にそのキーイベント送ってるのさ
OSにです.ペイントで貼り付けると一部しか取れてないんです.
そのときのアクティブだけってことは
 alt + Pscrn が送られてることになる.
げせねぇ
0267 NGNG
>>266
keybd_eventのヘルプの下の方は読んだか?
0268デフォルトの名無しさんNGNG
>>262
そんなこと言い出したらwin32apiだけだってdll使うっつーの
0269 NGNG
>>268
アフォですか? 比較するならmsvcrt.dllを使ったものと
比較すべきと言っているんだろ。
0270デフォルトの名無しさんNGNG
>>263
keybd_event(VK_SNAPSHOT,1,0,0);
keybd_event(VK_SNAPSHOT,1KEYEVENT_KEYUP,0);
0271270NGNG
2行目の1の後に,が抜けた。
0272デフォルトの名無しさんNGNG
LIBCTINY.LIBを使ってる人いる?
http://msdn.microsoft.com/msdnmag/issues/01/01/hood/hood0101.asp

簡単にサイズを小さくできるっていうライブラリ。
0273keybd_eventNGNG
了解

おさわがせしました
0274251NGNG
>>252さん
解決しました、ありがとう御座います。
0275サービスしてねNGNG
管理ツールでサービスの開始停止をしてるけど、これってプログラム上ではどうしればよいのですか?
レジストリの項目でServiceってのがあったので値を見てみたのですが特に変わってなかったです。
0276デフォルトの名無しさんNGNG
>>275
OpenSCManager, OpenService, ControlService, QueryServiceStatus
あたり。
0277サービスしてねNGNG
>>276
Hit’sです!ありがとうございます!
0278デフォルトの名無しさんNGNG
>>259
アセンブラで書け
8kBぐらいにはなるだろ
0279デフォルトの名無しさんNGNG
>>272の方がmsvcrt.dll使うより小さいしアセンブラよりずっと簡単。
なんせリンクするだけだから。
楽して小さくするならLIBCTINY。これ常識。
0280デフォルトの名無しさんNGNG
なんでそんなにサイズを気にするんだろ。
FDにぎっしりつめるつもりなのかしら。
0281デフォルトの名無しさんNGNG
>>280
高サイズはウイルスにとって致命傷ですから。
0282デフォルトの名無しさんNGNG
>>281
そっちか(^_^;)
0283デフォルトの名無しさんNGNG
PmenuH = LoadMenu((HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), "IDR_PopMenu");

でメニューハンドルの取得に失敗するんですが理由がわかりません。
どなたか教えてください。
0284デフォルトの名無しさんNGNG
>>279
MFC使うより小さくなるんか?
0285デフォルトの名無しさんNGNG
>>283
MAKEINTRESOURCE(IDR_PopMenu)でやってみたら?
0286デフォルトの名無しさんNGNG
RegDeleteKey関数で
サブキーを持つキーを一度で削除しようとしたところ
できませんでした。
ヘルプを見るとNT/2000では
サブキーを持つきーを指定することはできないと書いてありました。

2000でサブキーごとキーを削除するには
どうすればいいでしょうか?
サブキーを検索していってひとつずつ
削除するのが賢いやり方ですか?
それとも他に代用できる関数があるのでしょうか?
よろしくお願いします。
0287デフォルトの名無しさんNGNG
>>284
もちろんモノによるが、なる。
0288初心者です!NGNG
 WINDOWS2000を使ってるのですが、DOSでアセンブラ言語を実行しようとするとずっと実行中になってしまい処理が終わりません。きちんとリンクまではできてるはずなのですが・・・
時々コマンドを実行しようとすると、VDDの形式が無効ですってエラーメッセージが出るのですがなんか関係あるのでしょうか?
原因がまったくわかりません!誰か教えてください!
0289デフォルトの名無しさんNGNG
>>286
>サブキーを検索していってひとつずつ
>削除するのが賢いやり方ですか?
いや、愚かなやり方です。
毎回そんなことを考えずに済むように
しておくのが賢いやり方です。
どうすべきか、わかりますね?
0290286NGNG
>289
わかりません。
もうすこし具体的に言ってもらえませんか?

>毎回そんなことを考えずに
自分でサブキーを検索して消していく
関数を作っておけということですか?
0291289NGNG
>>290
特定のやり方を押し付けたくありませんが
反問されている内容については
方向性はあっていると思います。
0292デフォルトの名無しさんNGNG
自分で作るサブキー名がわかってるなら
消すキーの中にサブキーをデータとして入れちゃえ
とか言ってみるテスト
0293286NGNG
レスありがとうございました。
結論としてはWin2kでサブキーごとキーを削除するには
サブキーを検索していってひとつずつ
削除する、という流れで、
代用できる関数は用意されていないので
自作すべし。
ということで落ち着きました。
ありがとうございました。
0294292NGNG
>サブキーをデータとして
サブキー名をデータとして

テスト失敗
0295283NGNG
>>285
すいません。やってみたのですが、「IDR_PopMenu 定義されていない識別子」ですと出てきてしまいます。
ちゃんとリソースにはあるのですが・・・
0296デフォルトの名無しさんNGNG
>>295
実はリソースのヘッダをインクルードしてないとか...
外してる可能性大
0297283NGNG
やってしまいました。( ̄□ ̄;)!!!
285さん296さんありがとうございました。
お騒がせしました。m(_ _)m
0298デフォルトの名無しさんNGNG
現在自端末にDHCPから設定されているIPアドレスを
ipconfig /release で開放。
ipconfig /renew で再取得
をしたく、ipconfigと同様なAPIを、検索で頑張って探してみたのですが
結局わかりませんでした。
WindowsCEならあるようなのですが。。。

どなたかご存知の方、教えてください。
0299デフォルトの名無しさんNGNG
>2000でサブキー削除
SHDeleteKey?
0300286NGNG
>>299さん
ありがとうございます、
大当たりです。
試してみましたが無事一発で消えました。
実は自分でSHDeleteKey関数と
同じようなの自作してる途中でしたw
ありがとうございました。

教訓
サブキーごとレジストリのキーを削除する場合は
SHDeleteKey関数を使用する。
0301 NGNG
>>259
以下のコードをa.cとa.rcというファイル名で保存して、
rc a.rc, cl a.c a.res でコンパイルすれば2048バイトになる。
9x系で動作しなくていいなら、cl /O2 a.c a.res /link /align:16
で1056バイトになる。

#include <windows.h>
#define IDD_DIALOG 1
#ifdef RC_INVOKED
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
#pragma code_page(932)
IDD_DIALOG DIALOGEX 0, 0, 87, 79
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
FONT 9, "MS UI Gothic", 400, 0, 0x80
BEGIN
 DEFPUSHBUTTON "OK",IDOK,27,53,50,14,NOT WS_TABSTOP
END
#else
BOOL CALLBACK DlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
 switch (uMsg){
 case WM_INITDIALOG:
  return 1;
 case WM_COMMAND:
  if (wParam == MAKEWPARAM(IDOK, BN_CLICKED))
   EndDialog(hWnd, IDOK);
  return TRUE;
 default:
  return FALSE;
 }
}
void Startup(){
 DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG), NULL, DlgProc);
 ExitProcess(0);
}
#pragma comment(linker, "/subsystem:windows /entry:Startup /merge:.rdata=.text")
#pragma comment(lib, "kernel32.lib")
#pragma comment(lib, "user32.lib")
#endif
0302デフォルトの名無しさんNGNG
>>300
教訓は2chでのレスは鵜呑みにしないってこった
0303デフォルトの名無しさんNGNG
>>301
キタ━━━━━━━(゚∀゚)━━━━━━━ !!!!!
0304デフォルトの名無しさんNGNG
>>300
ただしIE3だか4だかが入ってないWin95では動作しない罠
Win95をサポート範囲外にするならどうでもいいかも
0305286NGNG
>304
IE4.0以降の環境が必要みたいです。
ご報告。
0306デフォルトの名無しさんNGNG
質問元の>>286で2000って言ってるんだから問題ない罠
0307デフォルトの名無しさんNGNG
mfc**.dllやMSVCRT.dllのバージョンとこれらのDLLがインストールされる
タイミング(VSのSP○でインストールされるとかWindows98では標準でインストールされてるとか)
を知るにはMSDNのどこを見ればよいのでしょうか?
またはそれらが書いてあるサイトはあるでしょうか?
MSDNやgoogleで探してみたんだけど見つかりませんでした。
0308デフォルトの名無しさんNGNG
一番あやしいのはofficeだろうけど情報はまとまってないと思った。

でもここ3年ぐらいはDLL問題を聞かないなあ。
みんなstatic linkにしちゃったのかな。
0309デフォルトの名無しさんNGNG
Oracleでバックアップリカバリのテストをしようと思い、
強制的にファイルをぶっ壊す事が出来ないかと思ってます。
普通にエディタとかでファイルを開いて内容を変更して
保存しようとしても、他のプロセスが使用中とか
いわれちゃうんですが、APIでどうにかなったりしませんか?
#実運用時に突然DBが壊れた状況を作り出したいのです
0310デフォルトの名無しさんNGNG
>>301
あなた神ですよね。
0311デフォルトの名無しさん NGNG
Winアプリからデータベースにアクセスするにはどうすればいいのでしょうか?
何かモジュールやライブラリがいるのでしょうか?
MFCでAppWizardを使うやり方はなんとなくわかったのですが、SDKでやる方法
がわかりません。どなたか教えてください。
0312デフォルトの名無しさんNGNG
>>311
使用するデータベースと、接続法法によるけど。ADO 使うなら msdao15.dll あたり
を #import して使う。
0313 NGNG
>>309
\\.\PhysicalDriveNをRaw I/Oすればできそうな気もするが、
それより安いハードディスクを買ってきて物理的にぶっ壊す
ほうが安上がりかも。
0314デフォルトの名無しさんNGNG
実体のあるファイル別ディスクに入れといてケーブル抜くだけでいいじゃんよー
0315デフォルトの名無しさんNGNG
PrintDlgを使って印刷しようとしてるのですが、
SDKで複数ページ印刷は難しいんですかね?
と言うか、総ページ数の取得ってできないものなんですか?
0316デフォルトの名無しさんNGNG
ウインドウのサイズを変更できないようにするにはどうすればいいのでしょうか?
0317質問NGNG
複数の音(wav)を同時発声するにはどうしたらよいでしょうか。
PlaySound()ではムリなようだから
なにかほかのAPIがあれば教えていただきたいんですけど。
WinMEで。←絶対条件
0318デフォルトの名無しさんNGNG
direct sound?
MEが絶対条件とか言ってるようだと何も知らないみたいね・・・
0319デフォルトの名無しさんNGNG
物理的に壊すとアプリ(この場合oracle)じゃなくてシステム的にエラーが
起こってしまうんちゃうか。
システム的には正常で、アプリからは壊れているように見えることが
試験には必要なんでないの。
0320298NGNG
誰からもなしですね。。。残念です。
systemかjavaでやることにします。

質問の仕方まずかったのかなぁ。
0321デフォルトの名無しさんNGNG
ウインドウ領域を取得したいのですが
画面一番下にあるタスクバーの領域がとれません

 CWnd *pDeskTop = CWnd::GetDesktopWindow();
 CRect m_rect;
 pDeskTop->GetWindowRect(&m_rect);


タスクバーの部分も含めて取るにはどうすればいいですか
0322 NGNG
>>321
GetSystemMetrics(SM_CXSCREEN)
GetSystemMetrics(SM_CYSCREEN)
0323デフォルトの名無しさんNGNG
デスクトップウィンドウってタスクバー領域も含んでたような
0324デフォルトの名無しさんNGNG
>>323
>>322で完璧な答えが出ているのにお前がしゃべる必要があるのか?
0325デフォルトの名無しさんNGNG
質問です。

ビープ音を鳴らしたいのですが(スピーカーから出すのじゃなく)どうすればいいのですか?
0326デフォルトの名無しさんNGNG
>ビープ音を鳴らしたいのですが(スピーカーから出すのじゃなく)
じゃあ一体どこから・・・。
0327デフォルトの名無しさんNGNG
EnumFontFamiliesExでフォント列挙してるのですが、フォント名の頭に @ が付いてる
フォントをフィルタリングするにはどうすればよいのでしょうか?
フォント名文字列の先頭に @ が付いてるかどうかを調べるしかないですか?
フラグでもあるのかなーと思って質問してみますた。
0328デフォルトの名無しさんNGNG
カーソル位置でカーソル形状を変えたいんですが、どうやるか教えてください。

WM_MOUSEMOVEの処理で、カーソル位置の情報を調べて、LoadCursorで変更し
ようと思ってます。
カーソル位置が、キャレットであるとか、ビットマップであるとか調べる方法が
わからないです。
0329デフォルトの名無しさんNGNG
>>325
Beep()なAPIでどうだ? 漏れは使ったこと無いが。

>>326
マザーから鳴るのを知らないのか?
(厳密にはマザーじゃないかも知れんが。)
とんだ坊やだな。
0330デフォルトの名無しさんNGNG
>>329
マザーボードに搭載されてる「スピーカ」からな。
とんだ赤ん坊だね。
0331デフォルトの名無しさんNGNG
>>330
M/Bに搭載されているブザーじゃねーのか?
ブザーとスピーカじゃ物が違うのだが、知ってるか?
0332デフォルトの名無しさんNGNG
ブザーの中に入ってるものがスピ−カー
0333デフォルトの名無しさんNGNG
つぅか電気的に作成した音を出すのは全部スピーカだろう。
0334デフォルトの名無しさんNGNG
きっとマザーが勝手に振動して音が鳴るんだ
0335デフォルトの名無しさんNGNG
>>334
それってスピーカでは?
0336デフォルトの名無しさんNGNG
この中で一番困った人は誰
1.「スピーカー以外」と指定した質問者である>>325
2.つっこんだ>>326
3.よく知らないのにとりあえずマザー説を唱えて煽った>>329
4.おもしろがってる俺
0337デフォルトの名無しさんNGNG
>>335
スピーカーの原理ではあるがスピーカー機器ではないね。
だいたいそんなAPIがあるのか。
03382.NGNG
>>336
2.の時点では軽く困ったけどみんなのおかげで今は楽勝です。w
0339デフォルトの名無しさんNGNG
>>333
認識甘い。
君は車のクラクションがスピーカだと主張しているわけか。(藁
0340デフォルトの名無しさんNGNG
ブザーとスピーカー、音の発生方法が若干違う。
ブザーは振動物に固体を当てて発音している。

それはともかく、Beep()ってのがあるのは確かだな。
0341デフォルトの名無しさんNGNG
どうでもいいレスでスレがのびるのが一番困った。
0342デフォルトの名無しさんNGNG
>振動物に固体を当てて
0343デフォルトの名無しさんNGNG
http://plaza12.mbn.or.jp/~audio/bee_02.htm
ブザー作って来い。
0344デフォルトの名無しさんNGNG
>>342
なんといやらしい。
0345デフォルトの名無しさんNGNG
デュアルショックにティムポをあてたらきゅー、きゅーと音が鳴るのですがブザーですね
0346デフォルトの名無しさんNGNG
>>343
ハゲシクワラタ
ナイスネタ
てかネタだよな
0347デフォルトの名無しさんNGNG
MessageBeep()
0348デフォルトの名無しさんNGNG
printf("\a");
0349デフォルトの名無しさんNGNG
煽り甲斐があったよ。てか、煽る気はあまりなかったが。
マザーに直付けのちっこいブザーやら、リード線引いてきてちゃちいスピーカーを付けるパターンやらがあるから
とりあえずマザーと書いたんだが。
イメージ的にはあってると思うが、通じないかい?
漏れだけしか通じない罠なら逝ってきます。
0350デフォルトの名無しさんNGNG
この板と全然関係ない話のせいで>>327,328の質問が流れてしまって…合掌
0351デフォルトの名無しさんNGNG
こんなんして B5縦 で印刷したいんですが。ちなみに RICOH の NX710 です。

HDC hdc2 = ::CreateDC(NULL, printernames[target], NULL, NULL);
DEVMODE dmMode = {0};
dmMode.dmSpecVersion = DM_SPECVERSION;
dmMode.dmSize = sizeof(DEVMODE);
dmMode.dmFields = (DM_PAPERSIZE | DM_ORIENTATION);
dmMode.dmPaperSize = DMPAPER_B5;
dmMode.dmOrientation = DMORIENT_PORTRAIT;
hdc = ResetDC(hdc2, &dmMode);

プリンタにB5横しか入ってないと、プリンタに「A4入れろやゴルァ」と出るんです。
90度傾けて印刷させるにはどうアプローチすればいいですか?
0352デフォルトの名無しさんNGNG
>>351
プリンタのプロパティで縦方向印刷に設定しる!
0353デフォルトの名無しさんNGNG
>>352
うーん確かにそれだと出るんですが・・・・
ユーザに設定させたり保存させたくないんですよぉ
0354デフォルトの名無しさんNGNG
>>327
正解!ダトオモウ...

>>328
各コントロールをサブクラス化してWM_MOUSEMOVEを引っかける
のが妥当かな。

どっちも地震無し。
0355デフォルトの名無しさんNGNG
用紙縦=GetDeviceCaps(hdc2,HORZSIZE) * 100;
用紙横=GetDeviceCaps(hdc2,VERTSIZE) * 100;
if(縦横のサイズ != B5サイズ){
 MessageBox(hWnd,"B5にしてね(ハァト",NULL,MB_OK);
 exit(1);
}
0356デフォルトの名無しさんNGNG
PageSetupDlgで、縦方向に設定したときと横方向に設定したときで、
DEVMODEがどう変わるか調べて、
それに合わせてソースを書く(w
0357デフォルトの名無しさんNGNG
>>327
英語版には縦書きという概念がないから日本語化のとき
先頭に@があるかないかをフラグ代わりにしたの
>>328
WM_SETCURSORという専用のメッセージがあるからそっち使え
0358 NGNG
>>351
こんな感じか?

PRINTER_INFO_2 *GetDefaultDevMode(LPTSTR name){
PRINTER_INFO_2 *pinfo2 = NULL;
HANDLE hPrinter;
if (OpenPrinter(name, &hPrinter, NULL)){
DWORD size;
GetPrinter(hPrinter, 2, NULL, 0, &size);
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER){
pinfo2 = (PRINTER_INFO_2 *)malloc(size);
if (!GetPrinter(hPrinter, 2, (LPBYTE)pinfo2, size, &size)){
free(pinfo2);
pinfo2 = NULL;
}
}
ClosePrinter(hPrinter);
}
return pinfo2;
}

HDC CreatePrinterDC(LPTSTR name){
PRINTER_INFO_2 *pinfo2;
HDC hdc;
pinfo2 = GetDefaultDevMode(name);
if (!pinfo2)
return NULL;
pinfo2->pDevMode->dmFields |= DM_PAPERSIZE | DM_ORIENTATION;
pinfo2->pDevMode->dmPaperSize = DMPAPER_B5;
pinfo2->pDevMode->dmOrientation = DMORIENT_PORTRAIT;
hdc = CreateDC(pinfo2->pDriverName, pinfo2->pPrinterName, NULL, pinfo2->pDevMode);
free(pinfo2);
return hdc;
}
0359デフォルトの名無しさんNGNG
紙2001みたく、他アプリケーションが、ドラックの開始をしたことと、
キャンセルを検知するのは、どーすんでしょうか?
0360デフォルトの名無しさんNGNG
>>359
フックすれば?
0361デフォルトの名無しさんNGNG
>>360
ですね。
03623ヶ月目NGNG
ディレクトリのコピー/削除等の実装をSDKでやった事ある方は
MFCのときはCFileFindクラスを使いますか?
サンプル等探してもCFileFindクラスを使用した例があまり見当たりません。
使い勝手等何か問題あるのでしょうか?
0363286NGNG
>362
普通に便利だな、と思った。
0364デフォルトの名無しさんNGNG
exitのかわりになるWin32 APIってないですか?
0365デフォルトの名無しさんNGNG
ExitProcess
0366デフォルトの名無しさんNGNG
>>365
ありがとう!
0367デフォルトの名無しさんNGNG
>>364-366

なんだか危険な感じがしないでもない。
0368デフォルトの名無しさんNGNG
まあ普通はexit()するわな。Cランタイムが後処理してくれるし。
0369デフォルトの名無しさんNGNG
実行形式ファイルのバージョン情報を得るにはどうしたらいいんですか?
右クリック->プロパティ->バージョン情報
で出てくる情報を得たいんですけど、教えてください。
0370デフォルトの名無しさんNGNG
>>362
SDKだろうがMFCだろうがATLだろうが、ディレクトリ操作はSHFileOperation()
0371362NGNG
>>363 >>370
さんくすです。
NT4.0考えなくていい時はSHFileOperation()使います。
0372370NGNG
>>371
NT4.0でも使えるのですが・・・ ( ;´Д`)
0373362NGNG
>>372
検索してみたんですが、
SP1だと複数のファイルを指定すると失敗するらしいです。
0374362NGNG
↑実際に確認してませんので違ったらすいません。
0375351NGNG
>>358
出ました! ありがとうございます
0376デフォルトの名無しさんNGNG
>>369
GetFileVersionInfoだったっけ
こんなわかりやすいAPI名で人に聞くとはお前PG向いてないよ。田舎帰れ
0377デフォルトの名無しさんNGNG
最近いろいろなアプリケーションでよく見かけますが、
ツールバーやリストボックスなどのコモンコントロールで、
背景に画像を設定するにはどうしたらいいですか?
検索しても背景色がせいぜいだったので教えていただけないでしょうか。
0378デフォルトの名無しさんNGNG
>>377
コモンコントロール・・・
それ、VB板で聞いたら?
0379デフォルトの名無しさんNGNG
間違った。
VBスレね。
0380デフォルトの名無しさんNGNG
>>378
なんでVBなの?
0381デフォルトの名無しさんNGNG
>>380
378 が何か勘違いしてるんだろ。放置しといてやれよ。
0382デフォルトの名無しさんNGNG
>>351 >>358 に便乗するっす。長くてすんません。
CreateDC に DEVMODE 構造体を渡す前に (>>351 さんは代わりに ResetDC を
使ってるけど) DocumentProperties() を呼ばなくてもよいんですっけ。
DocumentProperties(NULL, hPrinter, pszPrinterName,
    pDevMode, pDevMode,
    DM_IN_BUFFER | DM_OUT_BUFFER);
みたいな感じ。
私が試している限り、あってもなくても関係なさそうだったんだけど
なんだか「偶然動いてるだけ」な感じがして気持ち悪いです。

MSDN によると「現在の設定を使うならこの DocumentProperties は不要」と
読めるんですよね。ここでもう混乱っす。

文書やネット上のサンプルコードや私が試した事をまとめるとこんな感じなんだけど:
 上のようにして DocumentProperties を呼ぶと、"非"一時的に設定を変更
 しちゃう。すなわち、次にアプリケーションを起動して DEVMODE を
 取得してみると、前回 DocumentProperties で設定したモノが取得できる。
ていう解釈でよいと思いますか?
0383デフォルトの名無しさんNGNG
質問。
子ウインドウを作ると、その子ウインドウのほうが
アクティブになると思うのですが、
親ウインドウの方をアクティブにし続けるにはどうすればよいでしょうか?
今は、子ウインドウを作ったあとにSetActiveWindow関数を呼んで
親ウインドウに戻しています。

また、終了するまでアクティブでい続けるような
ウインドウを作ることはできるでしょうか。
誰かよろしくお願いします。
0384デフォルトの名無しさんNGNG
>終了するまでアクティブでい続けるような

使いたくねー、こんなアプリ
0385デフォルトの名無しさんNGNG
>>383
アクティブでなくなったら終了する
0386デフォルトの名無しさんNGNG
>>384
いや、別にみんなに配るようなアプリを作っているわけじゃなくて
自分で使うのに、アクティブで無くなると困るって言うだけなんですが。
0387デフォルトの名無しさんNGNG
挙動が激しく、トロイっぽいよね
0388デフォルトの名無しさんNGNG
画像を扱うアプリなんです。
高速な描画、表示が条件なんですが、どのような方法がベストなんでしょう結局。
まず、バックバッファ相当のモノについて、
1.DIBSectionを使う
2.ただのメモリブロックを使う
3.DirectDrawSurfaceを使う(システムメモリ上??)
で、フレームバッファへの転送なんすけど、
1.Blt
2.アドレス拾ってmemcpy
とか考えられるんだけど、いったいどうすりゃストレスない描画ってできるんでしょう?

例えばフォトショップとかmameとか、ああいったのはどういった方法で実現してるんでしょうか?
0389デフォルトの名無しさんNGNG
>>388
>フォトショップとかmameとか
同列で語って良いのか・・・?
0390デフォルトの名無しさんNGNG
>>389
どちらにせよGDIとか使わずに表示まで持っていってますよね?
で、どちらも膨大なリソースを表示しているって意味では
まともにグラフィック処理してるって思うんですよ。
その方法は全然違うんだろうけど・・・
0391デフォルトの名無しさんNGNG
>>390
>どちらにせよGDIとか使わずに表示まで持っていってますよね?

マジで?
0392デフォルトの名無しさんNGNG
>>391
違うの??よく知らないんだけど。
つーか普通にDIBとかからBlt、StretchBltとかって全然重いと思うんです。
mameの60fpsとかって全然無理なレベルぐらい重いんだけど・・・
画面モードとかによるのかな?
0393デフォルトの名無しさんNGNG
>>392
君、DirectXとかその辺の基本理解してからしゃべってる?
0394デフォルトの名無しさんNGNG
>>393
あんまり。基本っつーと、どんなことかな?
0395デフォルトの名無しさんNGNG
>>394
ハードウェアが「どんな操作を」支援してくれるのか、じゃないの?
0396デフォルトの名無しさんNGNG
Wininet で非同期通信をやろうと思ったんですが、
MSDNのサンプルを見るとスレッドを使っているみたいです。

WinSock ではスレッドを使わずにできたような気がするんですが、
Wininet ではスレッドを使わない非同期通信はできるんでしょうか。
0397デフォルトの名無しさんNGNG
>>378
Delphiで作った2chブラウザでも見かけるけど・・・。
結局どうやったらできるのかな?
0398デフォルトの名無しさんNGNG
>396
ほんとにMSDN調べた?
http://msdn.microsoft.com/library/default.asp?url=/workshop/networking/wininet/tutorials/implement_async.asp
0399396NGNG
見ましたよ>398
// Create a thread to handle the header and
// resource download.
cpContext->hThread = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)Threader,LPVOID(cpContext),
  0,&cpContext->dwThreadID);
このぶぶんでThreadを作っているけど、これをやらないではできないのかという話です。
0400デフォルトの名無しさんNGNG
>>377
ツールバーの場合はRebarをつかって背景画像をセットしてると思う。
0401デフォルトの名無しさんNGNG
続き(じゃねーけど)はここに書いてある。
http://www.codeproject.com/useritems/asyncwininet.asp
0402デフォルトの名無しさんNGNG
OS が日本語Windowsか英語Windowsか調べられるAPIってあります?
0403デフォルトの名無しさんNGNG
>>402
おれはGetACP() == _KANJI_CPで判定しているが、もっとうまい方法があれば、知りたい。
しかし、マルチリンガル版も視野に入れたら、GetACPしか無いような気もするんだが。
0404デフォルトの名無しさんNGNG
>>403
GetOEMCP()は?
0405デフォルトの名無しさんNGNG
GetSystemDefaultLCIDってのはどうだろう?
0406デフォルトの名無しさんNGNG
>>405
よさげ。
0407396NGNG
>401
ふむ、ためしてみます。
0408デフォルトの名無しさんNGNG
hInstanceを保存する必要ってあるの?
常にGetModuleHandle(NULL)使ったらまずい?
0409 NGNG
>>408
効率を考えなければ特に問題はない。
0410デフォルトの名無しさんNGNG
>>409
ありがとう
0411デフォルトの名無しさんNGNG
使っているWindowsが日本語版かどうかってどうやって調べるんでしょ?
特に無断転載する輩の多い韓国版では動かなくしたいんですけど。
0412デフォルトの名無しさんNGNG
>>408
DLLなら保存しないとダメれすよ
0413377NGNG
ツールバーはRebarですか、どうも。
試してみます。
0414デフォルトの名無しさんNGNG
VBで使用するOCXを、VCで作っているんですけど
そのOCXでエラーが発生した場合、VB側のOn Errorでそのエラーを捕まえたいんです。

その場合、OCX側でどのようなコードを書けば良いのでしょうか?
0415デフォルトの名無しさんNGNG
>>414
throws Throuwable
0416デフォルトの名無しさんNGNG
COMの境界をまたがって例外を投げてはいけない、と
COMの偉い人がいってますた。
0417414NGNG
レスどーもです。
VB側のOnErrorで取れました。
が、
>416サソの「COMの境界を〜」って、如何いう意味なんですか?
いまいち意味が判らんのですが...出来ましたら、解説をお願いします。
0418デフォルトの名無しさんNGNG
>>411
ライセンスを日本海ウェアか竹島ウェアに変更しる。
if(IDNO==MessageBox(,"竹島は日本の領土?",,MB_YESNO)) exit(-1);
0419デフォルトの名無しさんNGNG
>>416 C++の例外とCOMの例外を区別してないと思われ(先生はわかっていると思われ)
くそMFCだとそのあたりが隠蔽されているから、わからないと思われ。
つーか、S_OKとS_FALSE以外のHRESULT直接返せ。
0420デフォルトの名無しさんNGNG
>>411
ちょっと前にロケール識別子でFA出てる。
レジストリ変えられたらおしまいだから、色々複合してみるのもいいかもしれん。
0421デフォルトの名無しさんNGNG
>>420 すみません、FAとはなんでしょう?
0422デフォルトの名無しさんNGNG
>>421
話の流れからして Final Answer かな。
しかしFAなんて略すなや。
0423デフォルトの名無しさんNGNG
AFならAnal Fuckだったのに。
0424デフォルトの名無しさんNGNG
フラットツールバーの途中にコンボボックスを設置したいのですが、
どうやればいいのか教えてください。

現在、セパレータの幅を指定して挿入しているのですが、
フラットスタイルにすると真ん中に縦線がに入ってしまい、
上下に線が見えてしまいます。

コンボボックスを大きくすれば解決するのですが、
見栄えが悪くなるのでどうしたらいいか悩んでいます。
バイナリエディタのBzが綺麗にやっているのですが、
どうやったら良いのでしょうか。
0425デフォルトの名無しさんNGNG
FA:深キョン アナルファック
0426421NGNG
>> 425 thanks なわけねーだろ、thanks > 422
0427デフォルトの名無しさんNGNG
初歩的な質問なんですが、テキストファイルを読み込むとき、
一行ずつ読みたいのですがみなさんどうやっていますか?
一行ずつ読むAPIはありませんよね?というわけで
1.Cライブラリ関数を使う
2.ReadFileで全部メモリに読んでから一行ずつ抜く
3.ReadFileで一文字ずつ読んで改行を見つける
のどれかになるのかなと思ったのですが、ライブラリ関数は使いたくない
ということと、3.では遅くなるということを考えた場合、2しかないですか?
0428デフォルトの名無しさんNGNG
>>427
2.5 ReadFileで少しずつ読んで改行までを使う

っていうかどうしてライブラリが使いたくない?
0429デフォルトの名無しさんNGNG
>>427
なぜfgetsを使いたくない?
0430デフォルトの名無しさんNGNG
>>429
一行の長さがわかんないんで。。。
0431デフォルトの名無しさんNGNG
>>430
分からないんなら、どこのメモリに読み込むの?
0432デフォルトの名無しさんNGNG
俺は最大行の長さを調べてからmallocして読み込んでいる。
ファイルサイズ分バッファを獲得してもいいけど、無駄といえば無駄だから。
0433デフォルトの名無しさんNGNG
>>430
Perl使え。
0434デフォルトの名無しさんNGNG
がいしゅつだと思いますが、
SetDIBitsToDeviceでJPEGをディスプレイに表示させようと思っています。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6145.asp
↑を参考に書いてみましたが、描画されませんでした。
自力でJPEG展開は出来ましたが、気になって仕方がありません。
どなたかご存知の方、手順を教えてください。
0435434NGNG
sageてしまったのでアゲ
0436デフォルトの名無しさんNGNG
そのサイトに書いてある手順でOK
出来ないのならあんたに問題有り
0437デフォルトの名無しさんNGNG
描画ってもしかしてディスプレイか?
それなら不可能。プリンタのDCへStretchDIBits汁
0438壁紙がかわらんNGNG

#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, "C:\\sample.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE );

return 0;
}
全く変化しません.(?_?) win98se + VC6
0439デフォルトの名無しさんNGNG
「Delphi」
これが読めなくて
そろそろ一年。。
これはなんと発音すればいいのでしょう?
デルピ??
0440439NGNG
↑
すみません、すれ違いとは思ったのですが、
どこで聞いてもすれ違いっぽいので書き込みました。
申し訳ない。
0441デフォルトの名無しさんNGNG
「でるふぃ」です
0442439NGNG
>441
おかげ様で人前で
「でるぴ」
などと発言し、恥をかかなくてすみました。
ありがとうございます。
0443デフォルトの名無しさんNGNG
実際の発音はde'lfaiで、カタカナ表記ではデルフォイ、デルポイと言うらしい。
0444439NGNG
>443
そうなんですか、
とりあえず
「でるふぃ」でいきますねw
ありがとうございました。
0445デフォルトの名無しさんNGNG
>>439
http://www.borland.co.jp/news/delphi7j.html
0446439NGNG
>445
あっ。。
デルファイ
って書いてあるw
情報ありがとうございます。
でも自分で言うのもなんですが、
低レベルな質問ですねぇ。
0447デフォルトの名無しさんNGNG
>>437
ディスプレイには使えないのですか?
言われてみると、そんな気もします・・・。
サンクス。
0448デフォルトの名無しさんNGNG
SetWindowRgnでリージョンセットして、
そのあとさらにSetWindowRgnであっさり新しいリージョンに置き換わると思ったら
置き換わらないYO!

これってウィンドウ破棄してリージョンセットしなきゃ無理でつかね?
0449魔王ハルトンNGNG
>>448
んなこたないよ、何回リージョン変えても併記だよ。
何かエラー出てるんじゃないの。
0450デフォルトの名無しさんNGNG
リージョン破棄とかもせずSetWindowRgnでよいのか?
それでいいなら漏れのPCもうだめぽ(´д⊂
0451デフォルトの名無しさんNGNG
//DIB をファイルへセーブ
hfile = CreateFile("aa.bmp", GENERIC_WRITE, FILE_SHARE_WRITE,
NULL,CREATE_ALWAYS, 0, NULL);

とすると aa.bmp が全く指定した覚えのないディレクトリ内に作成されてしまう
んですが,原因はなんでしょうか.
途中で PaintDesktop() とかしてるんでカレントが変わってしまってるってこと?
0452デフォルトの名無しさんNGNG
GetCurrentDirectoryで確認してみれば?
0453デフォルトの名無しさんNGNG
↑お,了解.
0454デフォルトの名無しさんNGNG
GetOpenfileNameで

ofn.lpstrFilter = "BMP files(*.bmp)\0*.bmp\0\0";

同時に jpg も表示するにはどう書けばええんですか?
(*.bmp,*.jpg) とか色々試したがだめや
0455デフォルトの名無しさんNGNG
"All image files (*.bmp,*.jpg,*.pcx)\0*.BMP;*.JPG;*.PCX\0"
0456デフォルトの名無しさんNGNG
自己解決でした↑
0457デフォルトの名無しさんNGNG
>>456オメ
0458デフォルトの名無しさんNGNG
#define STRICT
#include<windows.h>
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR CmdLine,int CmdShow)
{HWND hwnd;MSG msg;WNDCLASS wc;
wc.style=0;wc.lpfnWndProc=WindowProc;wc.cbClsExtra=0;wc.cbWndExtra=0;
wc.hInstance=hInstance;wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName=NULL;wc.lpszClassName="Hello";
if(RegisterClass(&wc)==0)return 0;
hwnd=CreateWindow("Hello","Hello World",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,0);
if(hwnd==NULL)return 0;ShowWindow(hwnd,CmdShow);UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
return msg.wParam;}
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{switch(message){case WM_DESTROY:PostQuitMessage(0);return 0;}
return DefWindowProc(hwnd,message,wparam,lparam);}

こんな俺はセンス内でしょうか
0459デフォルトの名無しさんNGNG
何回も聞いて申しわけないんですが以下で壁紙が変化しないのはどういう
原因がありえますかね.SystemParametersInfo の返り値は毎回0です.エラー

#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow )
{SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, "森.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE );
return 0;}
0460デフォルトの名無しさんNGNG
ちなみに壁紙チェンジャの類はちゃんと動く.
アクティブディスクトップを設定しても解除しても
上のプログラムは駄目.
0461デフォルトの名無しさんNGNG
森.bmp が見つからないとか?
0462デフォルトの名無しさんNGNG
質問です。
画像を表示させるにはどうやればよいですか?
0463デフォルトの名無しさんNGNG
展開->描画
0464デフォルトの名無しさんNGNG
>>462
ネタうざい
0465壁紙変わらんNGNG
char s[]="森.bmp";
SystemParametersInfo( SPI_SETDESKWALLPAPER, 0,s , SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE );

としたら成功でした.
lpszFileName,ってのは即文字列じゃだめなのか.
0466 NGNG
>>427
CreateFileMapping + MapViewOfFile でメモリにマッピングして
自力の loop で改行探せば?
0467デフォルトの名無しさんNGNG
WM_MOUSEWHEELが定義されていないってでるんですが
このメッセージは16進数でいうといくつですか?
教えてください。
0468デフォルトの名無しさんNGNG
winuser.hより0x020A
0469デフォルトの名無しさんNGNG
ありがとうございます。
なぜかwinuser.hをインクルードしても定義されていませんってでるんですよね。

windows.hをインクルードしてもたしか自動的にインクルードされるような
気もするんですが。
気のせいだったらすみません。
とりあえず自分でdefineしてみることにします。
0470デフォルトの名無しさんNGNG
WM_MOUSEWHEELはwin98以降の定数だから、なんかdefineしないと定義されないのでは?
0471デフォルトの名無しさんNGNG
DISKTOPのHARDCOPYを取得するプログラムを書いているのですが、
OFFICEアシスタントだけ、キャプチャーできません。
CreateCompatibleBitmapとBitBltを使用しています。

どなたか、お知恵をお貸しください。

環境はVC 6.0、Windows2000です。

0472467NGNG
>>470
あ、そうですね。
_WIN32_WINDOWSの大きさを0x400以上に定義してみようかと思います。
ありがとうございました。
0473デフォルトの名無しさんNGNG
>>450
セットするほうのリージョンは毎回新しいの生成してる?
0474デフォルトの名無しさんNGNG
もしかしてリージョン毎回生成しないと無理でつか?

最初に作って使いまわしてる・・・(;´Д`)
0475デフォルトの名無しさんNGNG
>>471
そこらへんにころがっているフリーのキャプチャソフトでもとれないし。

もしかしてマウスカーソル?
0476デフォルトの名無しさんNGNG
隠しAPI(の一部であろう(藁)が公開されますた。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnapiover/html/api-overview.asp

ZDNet(http://www.zdnet.co.jp/news/0208/29/ne00_msapi.html)によると、
>WindowsがWindows Server製品と連係する際に使用する113種の通信プロトコル
らすぃ。
ぱっと見たところ、Shell Functionsが一番数が多いみたいだ。

なんか面白そうな奴見つけたら紹介して( ゚д゚)ホスィ…
0477デフォルトの名無しさんNGNG
あ、ミスったよ。
>WindowsがWindows Server製品と連係する際に使用する113種の通信プロトコル
とは別物だな。
0478デフォルトの名無しさんNGNG
シェル関係のAPIを見てみたけどは2000/XP用のが多いね
0479デフォルトの名無しさんNGNG
SHCreateDirectoryってMakeSureDirectoryPathExistsと同じかね?
0480デフォルトの名無しさんNGNG
http://www.microsoft.com/JAPAN/developer/library/jpntwkpf/_win32_netjoindomain.htm
このAPIでワークグループを変更できるみたいなんですが
使い方がさっぱりです。

できればVB用の使い方を教えてください。
0481デフォルトの名無しさんNGNG
DirectX関係もかくしてたのですか、MSは。
0482480NGNG
自己解決しました。
Private Declare Function NetJoinDomain Lib "netapi32.dll"_
(ByVal lpServer As String,_
ByVal lpDomain As String_
ByVal lpAccountOU As String,_
ByVal lpAccount As String,_
ByVal lpPassword As String,_
ByVal fJoinOptions As Long_
) As String

こうやったんですが、原文はOPTIONALな部分も
VBではoptionalを指定しちゃうとその後ろの引数を全部optionalに
しなきゃいけないのでoptionalは外しました。
0483デフォルトの名無しさんNGNG
見たことあるAPIも含まれているようなんだけど、
どれが隠しだったの?
0484デフォルトの名無しさんNGNG
今までSHCreateDirectoryExは公開してたが、
今回は隠しAPIであるSHCreateDirectoryを新たに公開した。
・・・ってあんまり得した気がしない。
0485デフォルトの名無しさんNGNG
今回オープンになったので役に立ちそうなのってある?
あんまり見当たらない・・・
0486デフォルトの名無しさんNGNG
IsUserAnAdminが簡単でよい
0487デフォルトの名無しさんNGNG
jpgをビットマップファイルに取り込むためにOleLoadPictureを
使ってみたんですけれど、取り込んだデータ色数はディスプレ
イの設定に依存してしまいます。
get_HandleからDIBSECTIONを参照する方法と、Renderを用いる
方法の2とおり試してみましたが、ダメでした。
やはりライブラリですか?
何か良い方法がありましたら教えてください。
0488デフォルトの名無しさんNGNG
Susie Plug-In
0489デフォルトの名無しさんNGNG
>>488
そういう方法も面白そうです、できればWindows APIで…
0490デフォルトの名無しさんNGNG
XPでユーザが切り替わったのを検知する方法ってあります?
WM_USERCHANGED なんてあれば楽なんですが。
0491デフォルトの名無しさんNGNG
>>487
質問するときは、あげてもいいんじゃない?
というわけで、代わりにage
0492デフォルトの名無しさんNGNG
>>487
DirectShow
0493デフォルトの名無しさんNGNG
ウィンドウのメニューは普通、左側から並んでいますが、
たまぁに右側に一個だけ離れているソフトがありますけど、
あれはどうやっているのでしょうか?
0494デフォルトの名無しさんNGNG
urawaza
0495493NGNG
>>493
自己解決しました。
ヘルプってか〜。
0496デフォルトの名無しさんNGNG
>>487
>>12
0497487NGNG
>>492
DirectShowですか。情報不足なので調べてみます。

>>496
GifもJpegもやっかいなことになってしまいましたねぇ。
今回は個人用ということで、見逃してください…。
0498デフォルトの名無しさんNGNG
LoadLibraryでtxtなどのファイルを渡すと「不正なイメージ」という
エラーダイアログが表示されます。
LoadLibraryが失敗したときにはNULLが返ってくるだけで良いので、
このダイアログを表示させないようにするにはどうすればよいのでしょうか?
0499デフォルトの名無しさんNGNG
seterrormode
0500デフォルトの名無しさんNGNG
>>499
arigatou
0501デフォルトの名無しさんNGNG
>>471
CAPTUREBLT
0502デフォルトの名無しさんNGNG
>>485
プロキシの設定だけはIEを参照して実際の接続はWinsockで
やるような場合、今までは自動構成スクリプトに対応するのが
面倒だったけどWinInetの新たに公開された関数で楽になった。
あとSwitchToThisWindow使うとフォアグラウンドロックを回避
できるのかな? (未確認)
0503デフォルトの名無しさんNGNG
>>502
どの関数?
0504デフォルトの名無しさんNGNG
隠しAPIリストのWindows FunctionsのFindWindow
(に限らず他にもあるかもしれないけど未確認)は、
API自体は既出なわけだけど、それはAPIに隠し機能があったとか
ドキュメントに隠し事項があったとかそういうことけ?
0505デフォルトの名無しさんNGNG
>>503
該当ページをWinInetで検索すればすぐ見つかるだろ…
まあいいや
DetectAutoProxyUrl
InternetGetProxyInfo
公開前からDependency WalkerでWININET.DLLを覗いて
「MSずるいよなー」とか思ってたから漏れ的には一番うれしい
0506デフォルトの名無しさんNGNG
>>504
FreeResourceとかFillMemoryに至っては何が新しいのか
さっぱり分からないです。
あとMultimediaのところにSndPlaySound(大文字)ってあるけど
これはsndPlaySound(小文字)とは違うの? なんかクリックすると
sndPlaySound(小文字)の説明が出てくるんだけど。
0507デフォルトの名無しさんNGNG
>>505
SDKは有償でなかった?
0508デフォルトの名無しさんNGNG
>>507
過去ログ見てないんか>>476
0509デフォルトの名無しさんNGNG
それにしても解説が手抜きだねえ
はじめて公開した関数はほとんどパラメータの説明しかないし
FreeResourceは現在return 0;だけの実装なのにいかにも
いろいろやってそうな説明してるし(たぶん昔のSDKの解説切り
貼りしたんだろう)NtCreateFileに至ってはZwCreateFileの
置換し忘れがあるし(w
0510デフォルトの名無しさんNGNG
MS「はいはい公開すりゃいーんでしょ、公開すりゃ。ったく、たりーなぁー」

きっとこんな感じでリスト作ったはず。
0511デフォルトの名無しさんNGNG
Deprecated なものや、既存の公開APIの組み合わせで実現可能なもの、
将来無くなるかもしれんと断りのあるもの、明らかに単なる計算ルーチンなもの
も結構あってなんだかつまらんです
0512デフォルトの名無しさんNGNG
つーか非公開APIって本来そういうもんでしょ
今回は仕方なく公開しただけで
問題はサードパーティーには「将来なくなるから使うな」とか何とか
言っておきながら「Microsoftのミドルウェア」は
しっかり使ってるというダブルスタンダード
0513デフォルトの名無しさんNGNG
既存のAPIの組み合わせでできるといっても
IsUserAdminとかInternetGetProxyInfoは手間がかなり違う。
自分でダイアログ用意すれば作れるからって
コモンダイアログがいらないってことにはならないでしょ
0514デフォルトの名無しさんNGNG
>>513
そういう「これ以外に手段がありません」というやつだけ抜き出してほしかったり
0515デフォルトの名無しさんNGNG
やってみようか。
Single-Threaded Apartments
いきなり挫折しますた(w
0516デフォルトの名無しさんNGNG
よく分からないのが多いんで逆に「これは明らかにいらんだろ」
というものを挙げてみます。
__WSAFDIsSet - 直接使わずFD_ISSETマクロで使う。
RtlConvertSidToUnicodeString - ConvertStringSidToSidを使う。
IsNetDrive - GetDriveTypeとWNetGetConnectionで代替できる。
OpenRegStream - SHOpenRegStream*を使う。
PathGetShortPath - GetShortPathNameでよい。
SHCLSIDFromString - CLDIDFromStringを使う。
SHCoCreateInstance - CoCreateInstanceを使う。
SHCreateDirectory - SHCreateDirectoryExで代替できる。
FreeResource - Win32では何もしないので不要。
RtlCharToInteger - strtolやwcstolでよい。
RtlUnicodeToMultiByteSize - WideCharToMultiByteでよい。
ExtDeviceMode - 16ビット時代の遺物。DocumentPropertiesを使う。
RtlCompareMemory - memcmpでよい。
RtlExtendedIntegerMultiply - __int64による乗算でよい。
RtlExtendedLargeIntegerDivide - __int64による除算でよい。
RtlUniform - CryptGenRandomで代替できる。
RtlUnwind - 直接使わず構造化例外処理を使う。
RtlIsNameLegalDOS8Dot3 - XP以降ならCheckNameLegalDOS8Dot3を使う。
IsBadHugeReadPtr - 過去の遺物。IsBadReadPtrを使う。
IsBadHugeWriteOtr - 過去の遺物。IsBadWritePtrを使う。
NtQuerySystemTime - GetSystemTimeAsFileTimeを使う。
RtlLocalTimeToSystemTime - LocalFileTimeToFileTimeを使う。
0517デフォルトの名無しさんNGNG
FD_ISSETってマクロじゃないやん
0518デフォルトの名無しさんNGNG
DrawText関数で文字列を自動改行する場合に
改行される部分のポインタを取得したいのですが
よい方法はないでしょうか?
DrawText関数は描画した高さを返すので困っています。
0519518NGNG
sageてしまった (--;;
0520デフォルトの名無しさんNGNG
>>517
BSD socketでどうなのかは知らないけどWinsockではマクロだよ
winsock.h見てみ
0521デフォルトの名無しさんNGNG
リストビューの背景にBMP画像を表示するのってどうやるんですか?
0522デフォルトの名無しさんNGNG
リストビューのWM_ERASEBKGNDを奪う
0523デフォルトの名無しさんNGNG
>>518
よくわからんがGetCurrentPositionExでも試してみたら
0524デフォルトの名無しさんNGNG
WINDOWCLASSEX
最後の3文字良いね。
0525デフォルトの名無しさんNGNG
×WINDOWCLASSEX
○WNDCLASSEX
じゃなかったっけ?
0526デフォルトの名無しさんNGNG
Win9x環境で、ExitWindowsExに
EWX_FORCEIFHUNG
のフラグつけたらどうなるんでしょうか?
想像では
EWX_FORCEフラグに置き換えられるのではないかと思います。
確認できる手段がなくて困っているのですが、
ご存知の方、教えてもらえませんか?
0527デフォルトの名無しさんNGNG
ExitWindowsEx
最後の3文字良いね。
0528526NGNG
>527
なんでこのタイミングで書き込んでしまったのか
自問自答。。
0529デフォルトの名無しさんNGNG
Exで終わるAPIはDowntownDXみたいでイヤ。
0530デフォルトの名無しさんNGNG
ネットワークプログラミングスレから移動してきますた。
http://pc3.2ch.net/test/read.cgi/tech/1023359282/605-
RASPPPoEをインストールして調べてみたところ、
szDeviceTypeはRASDT_Isdnになるようです。
ここでいうISDNとはISDNボードを使った1.5Mの接続とかの
ことで、64KのふつうのISDNはRASDT_Modemになるので
RASDT_Isdnもブロードバンド扱いすればいいかと。
0531デフォルトの名無しさんNGNG
>>530
COMポートになりすまさない内蔵ISDNとか使うとRASDT_Isdnになるよ
0532デフォルトの名無しさんNGNG
文法的な問題で詰まってるのですが、
これはどう解釈したらいいのでしょうか?

int test()
{
   return ::GetLastError() != ERROR_SUCCESS;
}

::GetLastError() != ERROR_SUCCESS;が
真なら1を返し、そうでなければ0を返すというだけのものでしょうか?
test()がintの戻り値を返すようにサンプルではなっているので
気になっています。
intなのに1 or 0しか返さないのでしょうか?
それともなんらかの場合、GetLastError()の値を返したりしますか?
0533デフォルトの名無しさんNGNG
>>532
MSDNの「return」見てみな。
ちなみに「真なら1」とは限らない。
0534デフォルトの名無しさんNGNG
>ちなみに「真なら1」とは限らない。

条件演算子は真なら1、偽なら0を返す。
これは言語で規定されている。

スレ違いだけどな。
0535デフォルトの名無しさんNGNG
>intなのに1 or 0しか返さないのでしょうか?
それをいったら BOOL 自体 int だしな
windef.h 見てみ
0536532NGNG
>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の値しかなりえないと。
あってます?
0537デフォルトの名無しさんNGNG
>>535
bool型ならじゃなくて、条件演算子ならってかいてあるじゃん
まぁ、規定されてるのはC++だけだが。
0538デフォルトの名無しさんNGNG
答え:そのソースはCで書かれている。
0539デフォルトの名無しさんNGNG
C++ならbool型のtrue/falseになって
Cならint型の1/0になる。
BOOLは単にintをtypedefしたもの。
で、API関係の解説はCでも使えるように大抵Cで書いてあるんじゃないのかな。
0540デフォルトの名無しさんNGNG
くだらないかもしれないけど、質問です。
あるウインドウハンドルの
親ウインドウのハンドルを取得するAPIってありますでしょうか?
良かったら教えてください。
0541デフォルトの名無しさんNGNG
なんか日本語おかしくてすみません。
あるウインドウの親ウインドウのハンドルを
そのウインドウのハンドルから取得できるようなAPIは無いでしょうか
ですね。
よろしくお願いします。
0542デフォルトの名無しさんNGNG
>>540-541
GetParent
0543デフォルトの名無しさんNGNG
これはまた・・そのまんまな名前ですね
ありがとうございました。
0544デフォルトの名無しさんNGNG
Octal 3State Buffer君よ、探し方を聞いた方がいいと思うぞ
0545bloomNGNG

http://www.leverage.jp/bloom/qry/search.qry?function=search
0546デフォルトの名無しさんNGNG
「プラットフォーム SDK: デバッグ / エラーに関する処理」
にある APIについてなんですが、

>対応情報
> Windows NT/2000:Windows NT 3.1 以降
> Windows 95/98:Windows 95 以降。Windows 95 用の再配布可能なファイルとして利用可能。
> Windows CE:対応していません

「再配布可能なファイルとして利用可能」とは、どういうことですか??
この APIをコールする実行ファイルを、一般に配布して良いということですか?
0547デフォルトの名無しさんNGNG
>>546
具体的にどのAPIなんだYO
0548デフォルトの名無しさんNGNG
>>546
IE5に含まれるとか、そんな意味だろ。この場合、IE5は再配布可能だから、Win95
でも利用可能ということになる。
よく、対応情報の回りを読んでみそ。
0549546NGNG
>>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を再配布して良いと。
0550デフォルトの名無しさんNGNG
NT4/98で
SHCreateShellFolderView(Ex)
相当の処理は自前でIShellView書く以外に無いのでしょうか?
0551デフォルトの名無しさんNGNG
>>550
あれは「2000/XP上で」Microsoftのミドルウェアが使っているAPIを
公開した、という名目なのでそれ以前でもひそかに使える可能性はある。
でもIE5が必要とか。
0552デフォルトの名無しさんNGNG
NtCreateFileでファイルの初期サイズを指定すると
連続したクラスタに割り当てられる可能性が高くなったりしますか?
0553YahooBB237224170.bbtec.netNGNG
確かこのへんのスレだったと思うが「俺ならその(実行中の)プログラムに
もぐりこんで**を調べる」というようなのを読んだ記憶があるんだが,
どうやればそんなことが出来るんでしょうか.
0554デフォルトの名無しさんNGNG
>553
んなことより、あんたの
名前欄はなんなんだ??
0555デフォルトの名無しさんNGNG
>>553
フックをかけると潜り込める
0556YahooBB237224170.bbtec.netNGNG
>名前欄はなんなんだ??

こっちが聞きたいよ.fusianasan としたらこれが出た.(今回も)
もちろんプロバイダはYBBですが,板の仕様?

それより実行中の別プログラムの何をフックするんですか?APIがある?
0557デフォルトの名無しさんNGNG
>556
皆を代表して聞くが
なんで
「fusianasan」と入れる?
0558デフォルトの名無しさんNGNG
>>556
ウインドウをフックする
0559fusianasaNGNG
?
なんか特別な意味がある?
どっかでみて適当に書いただけだが.
こんかいは fusianasa と書いてみました.

window handle を入手するんですね.どうも.
たぶんまた聞きますのでよろしく.
0560デフォルトの名無しさんNGNG
自分が管理してるデータがあって
データの一部をリストビューで表示させてるときって
データをどうやってもつんですか?

自分のデータを保持してると
リストビューにも同じ内容のデータが出来て
メモリがもったいない気がする
0561デフォルトの名無しさんNGNG
>>560
こっちのスレの最初のほうでちょっと議論があった

Windows Programing for C/C++(Not MFC)
http://pc3.2ch.net/test/read.cgi/tech/1018239290/l50

漏れは重複して持たない主義。ただMVCの分離が…
0562デフォルトの名無しさんNGNG
>>561
仮想リストビュー(オーナーデータ)でがんがれ。
0563 NGNG
>>561-562
thx
ちょっと読んできます
0564デフォルトの名無しさんNGNG
SDKのファイル・フォルダセキュリティ設定に関して質問があります。
AddAccessAllowedAceEx関数を使用し継承を設定したのですが、設定したフォルダの中に新しいフォルダを作成すると「継承元なし」のフォルダが出来てしまいます。
継承元を親フォルダに設定するにはどうしたらよいでしょうか?
OSはWindowsXPで、VC++のバージョンは6.0です。
0565デフォルトの名無しさんNGNG
VB質問スレとの重複ですみません。
こちらの方が適当だと思いますので、質問し直させてください。
VB6.0、Windows2000で、OpenPrinter関数でプリンタのハンドルが取れません。
ローカルプリンタだと大丈夫なのですが、\\SERVER\PRINTERといった
ネットワークプリンタだと失敗してしまいます。
ネットワークプリンタの場合、方法を変える必要があるのでしょうか?
0566デフォルトの名無しさんNGNG
それぞれがウィンドウをもつオブジェクトをクラスとして扱うために、
ウィンドウプロシージャをフレンド関数としてそのクラスにもたせています。
(メンバ関数のアドレスを取るのは望ましくないですよね?)

インスタンスはたくさんあるけれどもWndProcはひとつなので、
WndProcから見るとどのインスタンスに属するメッセージなのかが区別できません。
これを解決するために、CreateWindowでインスタンスポインタ(this)をWM_CREATEに
渡してSTLのmapにhWndとthisポインタを格納し、メッセージに応答するときは
hWndからthisをサーチしてインスタンスを決定する、という方法をとっています。

なんだか泥臭いので、もっといい方法はないでしょうか。
こういったことはよくありそうだと思うんですけど。
0567デフォルトの名無しさんNGNG
>>566
他に定番の方法としては、

・SetWindowLong でhWndにthisポインタを関連付けて置いて、
 WndProcでGetWindowLongで取り出し。

・サンクを使う。つまり、thisポインタを埋め込んだマシンコードを
 実行中にメモリに作ってしまって、それをWndProc替わりにする。ATLとか参照。
0568デフォルトの名無しさんNGNG
サンクって手抜き実装だと激しくメモリ使わない?
VirtualAllocの割り当て単位がページ毎だし、
サンク作る毎にメモリ確保してたら4kずつ取られてくよね
0569デフォルトの名無しさんNGNG
なんでVirtualAlloc使うん?
0570デフォルトの名無しさんNGNG
>>569
PAGE_EXECUTE属性をつけにゃならんだろうが
0571デフォルトの名無しさんNGNG
>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出えへんかったで。
0572566NGNG
わざわざmapなんて使わなくてもSetWindowLongのがスマートですね。

サンクですが、要するにメモリにマシン語書いておいてそこに突入させる
わけですよね? そいつをWndProc代わりにするってのがよくわかりませんが・・・。
何にしても最後にはWndProc呼んでやらないといけないですよね?

アセンブラはPC-98時代にぶいぶい言わしたくらいで最近はとんといじってません。
0573デフォルトの名無しさんNGNG
>>572
> そいつをWndProc代わりにするってのがよくわかりませんが・・・。
引数の hWnd を、アセンブラコードの部分でこっそり this とすり替えるんだよ。
0574デフォルトの名無しさんNGNG
>>571
通るかも知れないけど、EXECUTE属性のないメモリ上でコードを実行させるのは行儀悪いだろ
0575デフォルトの名無しさんNGNG
つか、ATLもそうだろ(VirtualAlloc使ってない)
文句があるなら、Microsoftにいってくれ。
0576デフォルトの名無しさんNGNG
>>574
デフォルトで実行属性がつくから、問題ない。

そんなの処理系・環境依存だろって意見はあるかも知れんが、そもそも
VirtualAlloc とか言ってる時点で Win32 環境限定の話だしさ。
0577デフォルトの名無しさんNGNG
>>572
おおよそのところ

memcpy( buf,
//---------------------------------
 mov dword ptr [esp+4] this
 jmp WndProc - (buf + α)
を意味するコード
//---------------------------------
 , size
);
SetWindowLong( GWL_WNDPROC, buf );

こんな感じにすると、第一引数としてhWndが入ってたはずの部分に
thisポインタの値が入った状態でWndProc関数に飛ぶので、
あとはテケトーに。
0578デフォルトの名無しさんNGNG
>デフォルトで実行属性がつくから、問題ない。
こんなことどこに書いてある?
0579566NGNG
なるほど、理解できました。
行儀悪いのは大好きなのですが、hWndとthisをすり替えるってのが
ちょっとキモチワルイです。

ひとつ思ったんですが、これって誰かにサブクラス化されたらえらいことになりますね・・・。
0580デフォルトの名無しさんNGNG
>>579
ecxにthisを入れてjmpすれば、
少なくともvcでは正常にthisが使えるよ。
0581デフォルトの名無しさんNGNG
>>578
公式にドキュメント化されてるかは分からないなぁ。

ただ、俺は少なくともプロセスヒープは「read/write/execute可能」という前提で
プログラミングして(いちいち GetProcessHeap && VirtualProtect なんて
やってない)。MS が出してるコードも、そうなってるしさ。
0582デフォルトの名無しさんNGNG
>>579
> ひとつ思ったんですが、これって誰かにサブクラス化されたらえらいことになりますね・・・。
なんで?
0583デフォルトの名無しさんNGNG
質問です。
特殊キーの状態はGetKeyStateで取得できるのですが、
それ以外のキーの状態を取得するAPIはありませんか?
0584583NGNG
sageてしまいますた。
0585デフォルトの名無しさんNGNG
>>583
GetKeyboardState
0586デフォルトの名無しさんNGNG
>>585
できますた! ありがとうございます。
0587デフォルトの名無しさんNGNG
それ以外のキーもGetKeyStateで取得出来るけど・・・?
0588デフォルトの名無しさんNGNG
え、そうなんですか?
GetKeyboardState()で特殊キーも取得できちゃったんで、
全部コレにしてしまいました。
その、GetKeyState()で、例えばzキーやxキーを取得できるとして、
速度的にはどっちが早いんですか?
0589デフォルトの名無しさんNGNG
安心しろ、人間がキーを打つ速度はそれよりはるかに遅い。
0590デフォルトの名無しさんNGNG
Sleep() と GetMessage() を、
ほぼ同時に実行したいのですが、どうしたらいいですか?
いつもはPeekMessageを使ってるプログラムで暇な時にSleepしてると
フリーズしたみたいになるので、その間だけGetMessageを使いたいんですが。
GetMessageを呼んだ時に送られるメッセージとかってありますか?
0591デフォルトの名無しさんNGNG
Sleep(0)とか

>>589
えと、ゲームを作ってて、俺マシンはK6-2の500MHzなんですよ。
んで、1フレームにイロイロ処理をしてると秒間10フレーム逝くか逝かないかで。
なんで、なるべく時間をかけたくないワケです。
0592デフォルトの名無しさんNGNG
>>590

電波ですか?

>GetMessageを呼んだ時に送られるメッセージとかってありますか?

これがあったら無限ループ
0593デフォルトの名無しさんNGNG
>>591
入力くらいスレッド分けろよ。
WM_KEYDOWNが来た時点でイベント起こしたりSwitchToFiberしたり汁。
そもそも、ループ毎に検出しなきゃならないのはジョイスティックくらいで、
キーボードなんかはイベントで十分。
0594デフォルトの名無しさんNGNG
>>593
アクションゲーなんですが、スレッド使うんですか? それはちょっと。
0595デフォルトの名無しさんNGNG
>>590
500mm秒ほど寝かせてPeakMessage使え。
スレッドの切り替え時間が十数mm秒だからほかへの影響もほとんどないし、
反応が悪くなることもない。
0596デフォルトの名無しさんNGNG
>>590
MsgWaitForMultipleObjects
0597デフォルトの名無しさんNGNG
>>595
500mm秒って50cm秒でしょうか?
ってどのくらいの長さですか?
0598デフォルトの名無しさんNGNG
50cm秒って初めて聞いたなw 500mm秒も初めて聞いたけど。
多分>>595は500�_秒と表現したかったんだろうけど、
ホントは500マイクロ秒と言いたかったのではないと予測。
0599デフォルトの名無しさんNGNG
自作コントロールのサンプルみたいのありませんか?

親ウインドウにメッセージを返すのに、どの変数を
どういう風に設定すれば良いのかがわからないのです。
0600デフォルトの名無しさんNGNG
> 親ウインドウにメッセージを返すのに
何のメッセージを返すの?

自前で処理したいメッセージなら処理してリターン、
それ以外はDefWindowProcにそのまま渡せばいいんだけど。
0601デフォルトの名無しさんNGNG
シャットダウン、ログオフなどを
WM_QUERYENDSESSION
で検出したのはいいのですが、
lParamがシャットダウンも再起動も
共に0になってしまいます。
見分ける方法はないでしょうか?
WinXP、VC.NETです。
0602デフォルトの名無しさんNGNG
PeakMessage萌え
0603デフォルトの名無しさんNGNG
>>600
自作のエディットコントロールで、NotifyメッセージをEDIT互換にしたいとかじゃないの?
0604 NGNG
>>601
見分けても意味ないだろ。
0605601NGNG
>604
見分ける方法はあるのですか?
それともないのですか?
0606デフォルトの名無しさんNGNG
>>605
何をやりたいのか、もう少し具体的に書いてみれば? 代案が出てくるかも
知れんぞ。
0607599NGNG
>>603
そんな感じです
0608601NGNG
>606
別スレですこし話したのですが、
ファイルを定期的にバックアップするツールを作っています。
その機能の一部に
終了時、バックアップをとる
というのがあるんですが、
これを実装するためです。
別スレでは、シャットダウン時は
重い作業厳禁、といわれたのですが、
ファイルのコピーなので仕方ないかな、と思って開発進めてます。
シャットダウン時にコピーすると応答が無い、という
ダイアログが出てしまいます。
ですから
WM QUERYENDSESSIONでFALSEを返し
システムからのシャットダウン要求を中断、
WM ENDSESSION中側でファイルの処理、
その後ExitWindowsExでシャットダウン
とするように動かしたいのですが、
一度止めて、ExitWindowsExする時に、
シャットダウンならシャットダウン、
リブートならリブート、と引数を変化させる必要が
あり、どうしても必要な情報と思ってます。
0609デフォルトの名無しさんNGNG
>>607
そんな感じって...自分でまともに説明もできんのなら
標準のEditコントロールでも使っとけ。

通知したい時点で
SendMessage(GetParent(hwnd),
    WM_COMMAND,
    MAKEWPARAM(GetDlgCtrlID(hwnd), EN_CHANGE),
    (LPARAM)hwnd);
のような感じで呼び出せばいい。
0610デフォルトの名無しさんNGNG
>>608
MFCスレで、そのソリューションを提示した者だ。
  if ( lParam & ENDSESSION_LOGOFF )
でちゃんと区別つけられたよ(Win2000)。
0611601NGNG
>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へ定数を調べにいくという考えは持ってませんでした。
次から気をつけたいと思います。
ありがとうございました。
0612601NGNG
>611
勘違いしてました。
これはExitWindowsExの引数に使う定数ですね。
>610さんのおっしゃられてる方法だと、
確かにログオフは検出されますが、
シャットダウンか再起動かは判別できないようです。
簡易的にはWM_QUERYENDSESSIONの
lParamが1か0かで同じ判断ができるようです。
喜びのあまり、てっきり
EWX_SHUTDOWNをENDSESSION_SHUTDOWNと
勘違いしていたようです、すみません。
ENDSESSION_LOGOFFもあるならと
ENDSESSION_SHUTDOWN
なども探してみましたがどうやらログオフしかないようです。
シャットダウンと再起動を見分けることはできないのでしょうか?
0613デフォルトの名無しさんNGNG
WIN32アプリをWM_CLOSEにより終了させる際に受け取るメッセージって
WM_CLOSE -> WM_DESTROY -> WM_QUIT
の順番でいいんでしょうか?
WM_DESTROYでオブジェクトの解法とかしてるんですけど
なんかの解法忘れがあるっぽくて、終了後CPU占有率が70%くらいになってしまう...
0614610NGNG
>>612 シャットダウンか再起動かの判別...オラは、わがんね。
0615613NGNG
メッセージの拾い忘れでした
はずかちー・・・
0616デフォルトの名無しさんNGNG
WM_DESTROYの後にWM_NCDESTROYが来るよ・・・(ぼそっ)
0617613NGNG
と思ったらOSがイカレてるだけでした・・・

イカレたOSでコンパイルしたexeって
やっぱイカレてるのかな
0618デフォルトの名無しさんNGNG
自分自身のウインドウハンドルを取得するいい方法はないっすか?

GetForegroundWindow を使えば、取得できないことはないですが
ちょっと違うんです。
あとは、GetDesktopWindow から下がっていくぐらいしかわからなかったっす。

関数の引数に与えてやれる情報は、何もないっす。

具体的には、DLL からその呼び出されているウインドウのハンドル
を取得したいのです。
DLLに直接ウィンドウハンドルを渡してやるとかは、ナシっす。
それをやりたくないのでありまして・・・。
0619デフォルトの名無しさんNGNG
自分自身ってなに?
WndProcの第一引数にハンドルが入ってくるが
0620デフォルトの名無しさんNGNG
http://www.torikyo.ed.jp/torie-h/
これは、田舎のひなびた小さな学校のHPを100万ヒットの
人気HPにしてあげようという運動です。現在のターゲット校は上記です。
多くの皆さんクリックしてあげて下さい。
HPに飛んだら、2,3回更新していただくと、もっとありがたいです。
どんどんコピペして他の板にまいてください。
0621bloomNGNG

http://www.leverage.jp/bloom/start/
0622デフォルトの名無しさんNGNG
>>618
どのウインドウのWindowProc中か知りたいということ?
スタックをさかのぼるしか方法ないと思うが
0623618NGNG
自分自身ってのがわかりにくかったっすね。すまんす。

実行しているプログラム=プロセスのことで、あってるのかな。

具体的にいいますと、a.exe ってのが、x.dll を使ってるとします。
このとき、a.exeが、自分自身ってことです。

そして、やりたいことというのは、x.dll からa.exe のウィンドウハンドルを
取得したいのです。

もしかして、DllMainの第一引数でOK???
もうちょっと調べてみます〜。
0624デフォルトの名無しさんNGNG
>>623
一つのプロセスは複数のウインドウを所有できることを忘れてないか?
0625デフォルトの名無しさんNGNG
1プロセス1ウィンドウではない。
まずこれを理解しよう。
コマンドラインで使うようなプログラムはウインドウを持たないし、
Exploror等は1プロセスでいくつものウインドウを持ってる。
0626デフォルトの名無しさんNGNG
>>623
まぁ、プロセスが持つウィンドウを全部調べたいと仮定して、EnumWindows & GetWindowThreadProcessId が妥当なところだろう。
0627618NGNG
DllMainの第一引数を使って、やってやるとやりたいことが
なんとかできあたみたいです。

アドバイス役にたちました。どもッス。
0628デフォルトの名無しさんNGNG
だれもDllMainの第一引数なんて言ってないと思うが
0629デフォルトの名無しさんNGNG
ツールバーを作成して、ビットマップがボタンに張り付いてくれたのはいいんですが、
これってシステムの背景色で透過させることはできないのでしょうか?
システム背景色は設定で変えられるので、ビットマップの周辺に灰色を塗っただけじゃ
浮いてしまう可能性がありますし、ダサいので・・・。

それと、メディアプレーヤ6.4のツールバーのようにツールバーを下の方に移動したいのですが、
SetWindowPosを受け付けてくれません。完全に下にへばりつかせるか、上にへばりつかせるかしか
できないようです。これもなんとかならないでしょうか。
0630デフォルトの名無しさんNGNG
age
0631デフォルトの名無しさんNGNG
>>629
「bitblt 透過」でgoogleしる。
0632デフォルトの名無しさんNGNG
>>631
マスクを生成して自前で透過処理を行え、ということでしょうか?
0633デフォルトの名無しさんNGNG
0番目のパレットの色が透過になるんじゃないの
0634デフォルトの名無しさんNGNG
>>618-619, 622-628
ネタ?かなり笑ったんだけど…
0635デフォルトの名無しさんNGNG
すんません、フォトショップがはき出したbmpがダメダメでした・・・。
0636デフォルトの名無しさんNGNG
プリンタに LintTo() で線を引くとえらく汚いのですが、
これは漏れのプリンタ(MJ-900C)がボロいからでしょうか?
0637 NGNG
CreateWindowの最後の引数はなに?
0638デフォルトの名無しさんNGNG
例外c0000026Hってなに?
3回も出やがった
0639あNGNG
>637
何を聞きたいのかよくわかりません。
検索エンジンにでも聞いてください。
0640638NGNG
一応補足しとくと、Window開いてDirectX作るだけのWIN32アプリ

Cライクにベタ打ちしてる間は動いてたけど
DirectXの初期化とかをまとめてクラス化してったら出るようになった

んだけど、なぜか初期化の前で出る

わけわかめ
0641デフォルトの名無しさんNGNG
コード出せ
0642デフォルトの名無しさんNGNG
【 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
ですよね???
0643デフォルトの名無しさんNGNG
>>642
SetFilePointerのリファレンスは読んでないけど、それを見る限り間違ってないように思うけど?
2G〜4Gなら、32ビットに収まる範囲だろ?上位DWORDはゼロでいいんじゃないの?
4G〜8Gが、上位DWORD=1になるんじゃない?
0644デフォルトの名無しさんNGNG
符号拡張だから。

サンプル通りLARGE_INTEGER使えって事だ
0645642NGNG
>>643

DWORD SetFilePointer(
HANDLE hFile, // ファイルのハンドル
LONG lDistanceToMove, // ポインタを移動するべきバイト数(下位32ビット)
PLONG lpDistanceToMoveHigh, // ポインタを移動するべきバイト数(上位32ビット)
DWORD dwMoveMethod // 開始点
);

確かにそうなんですが、下位32ビット lDistanceToMove は符号付って
書いてあるんです...もしかして、lpDistanceToMoveHigh が
Non-NULLのときは、lDistanceToMoveは符号無しとして扱われるのかな?

//実験すればすぐ分かりそうなもんですが...
 今カキコしてる環境では実験できないもんで(;´Д`)
0646642NGNG
>>644 はぁ、そうします。
0647デフォルトの名無しさんNGNG
> もしかして、lpDistanceToMoveHigh が
> Non-NULLのときは、lDistanceToMoveは符号無しとして扱われるのかな?

そりゃそうでしょ。両方が符号ビット持ってどうするのよ。
0648デフォルトの名無しさんNGNG
>>645
644じゃないけど
32ビットで符号つきならMSBと31ビットだけど
64ビットなら符号を上位32ビットに移せば下位32ビットの
MSBは符号を示す必要がなくなるじゃん。
下位32ビットで4GBまで表現できるわけでしょ。
0649デフォルトの名無しさんNGNG
CreateWindow(....... LPARAM lParam) この最後の引数はなににつかうの?
0650デフォルトの名無しさんNGNG
>>649
ウィンドウプロシージャに WM_CREATE が送られるとき、その lParam に渡すために使われます。
0651デフォルトの名無しさんNGNG
>>649
MSDN参照。
ウィンドウを生成したときに WM_CREAT メッセージが
WinProcに飛んでくるがそのときに lParam 値に設定される。
使い方はお好きなようにどうぞ。
0652651NGNG
さっきからかぶってますな。ネマツ。
0653642NGNG
>647-648
こんな夜更けにどうも。勉強になりますた。

>For example, to move in the range from [0] to 4 gigabytes set
>the contents of lpDistanceToMoveHigh to zero, or ・・・
こう書いてくれれば...
0654デフォルトの名無しさんNGNG
>>653
from 2 to 4 で問題ない。その少し前から文脈をよく読め。
0655636NGNG
自己レス
>>636

ひょっとして

CreatePen(PS_SOLID, 0, RGB(204, 204, 204))

とかで作ったペンで線書いても綺麗に出ないんでしょうか?
MSDN にそれっぽいことが。。。
中間色の直線を綺麗に出す方法どなたか教えてください。
0656デフォルトの名無しさんNGNG
>>655
画面の色数がハイカラーやフルカラーなら普通に問題なく出るよ。
256色の場合はパレットを操らないとだめ・・・
0657デフォルトの名無しさんNGNG
って、プリンタか。意味不明のレスしたね。ごめ。
0658デフォルトの名無しさんNGNG
>>655
カラープリンタで1ドットの太さの線を描いてもディザリングの
処理のせいで思ったよりで綺麗に出ないんじゃないの
0659デフォルトの名無しさんNGNG
>>655
中間色がそのまま出る、昇華型プリンタを買ってくる。
0660デフォルトの名無しさんNGNG
デスクトップやアプリ上でのマウス操作(DownやUp、ドラッグなど)
それらに渡さないでを全て引き受けるような方法ありませんか?
0661デフォルトの名無しさんNGNG
SetWindowsHookEx の WH_MOUSE とか、どう?
0662あNGNG
>660
メッセージをフックする。
>それらに渡さないでを
そんなことしたらえらいことになるぞw
0663デフォルトの名無しさんNGNG
>>661
フックというものですね、少し調べてみます。

>>662
>>それらに渡さないでを
>そんなことしたらえらいことになるぞw
そうなんですけどね、これができないと困るんですw

画面上でペイントみたいにお絵かきしたいんですが(お絵かきが最終目的ではありませんが・・・)
マウスのイベントをデスクトップや開いてるアプリに取られるとうまくいかないと思ったので。
0664デフォルトの名無しさんNGNG
デスクトップ上に落書きしたいんであれば、透明なウインドウを最大化すればいいんじゃね〜の。

#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);
}
--- 続きます ---
0665664NGNG
--- 続き ---
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;
}
0666660NGNG
>>664
なるほど、そういう手もありましたか^^;
結構お手軽な方法ですね。

0667デフォルトの名無しさんNGNG
斜め45度に傾いた細長のペンを作りたいのですが、出来ますか?
LOGBRUSHでDIBペンやHATCHペンではダメでした。
0668デフォルトの名無しさんNGNG
> 斜め45度に傾いた細長のペン

意味不明
0669デフォルトの名無しさんNGNG
ペンの形ってこと?
斜め45度に傾いた直線型のペンを作りたいとか?
0670デフォルトの名無しさんNGNG
現在ソースの無い DLL を解析しているのですが、特定 DLL 内への呼び出しを
全てフックするなり、ログを取るなりできるデバッガ/ツールを御存知ないで
しょうか。

# いまのところ ollydbg と言うデバッガを使っているものの、DLL 内の
# エントリポイント全てにブレークポイントを設定するのは困難なので、
# もう少しいいデバッガ/ツールが欲しくなっています。
0671デフォルトの名無しさんNGNG
風俗サイト広告逝ってよしっ!第3回戦
ただいま戦闘中!!!
嫌いな人はこちらへ漏れなく串つき
http://live.2ch.net/test/read.cgi/festival/1029826982/l30
頭のいい人限定
0672グローバルIPの取得方法NGNG
Web上の自作CGIや確認君から読み込む方法と
Ipconfigで書き出したテキストから読み込む方法と
試したのですが、あまりいい方法だと思いません。
みなさんどうしてます?
0673デフォルトの名無しさんNGNG
ipconfigはグローバルIP吐かないと思うが
0674デフォルトの名無しさんNGNG
>>673
OCNとか犀ネットの専用線なら吐く。
吐かないのはADSLでマスカレードかかってる場合。
0675デフォルトの名無しさんNGNG
>>673
漏れは672じゃないが、
モデム直結なら、グローバルIPを吐くんじゃないの?
当方、ルータユーザーだから分からんが。


0676デフォルトの名無しさんNGNG
ホスト名は環境変数から引いてそれを下のようにして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;
}
}
0677使えねーPaintDesktopNGNG
表示中のDesktop画像を取得したいのですが,PaintDeskTopでは
ActivDesktop のときに取れません.
方法はあります?
0678使えねーPaintDesktopNGNG
↑あ,デスクトップの背景です.アイコンやウィンドウのない原画です.
0679グローバルIPの取得方法NGNG
>>673
そうなんですよねぇ
うちはADSLモデム直なのでipconfigでもいいのですが
環境によって使えないのはどうかと思いまして
>>676
非常に申し訳ないのですが理解不能です^^;
676さんの書き込みをヒントになんとか頑張ってみます。
分からなかったときはまた書き込むと思いますが
そのときはよろしくお願いします。
ありがとうございましたー
0680デフォルトの名無しさんNGNG
>>668
>>669

>斜め45度に傾いた直線型のペンを作りたいとか?
そうです、ペンの形が45度傾いた物です、説明不足でした。
LineToで線を引いたときに、傾きと同じ角度の線をひくと細く、
傾きと垂直な方向に線を引くと太くなるようなペンを作りたいのです。

落書き機能を実現するためで、ペンの形を色々変えたいのですが、
丸と四角はPS_ENDCAP_ROUNDとかで実現できたのですが、斜めに傾いた
ものはつくれませんでした。
0681デフォルトの名無しさんNGNG

/ ←こういうやつ?

◆ 右下に引きずるとこうなって

  / 右上に引きずるとこうなるってやつだよな?
/
0682デフォルトの名無しさんNGNG
マウスカーソルを変更するプログラムの方法について質問したいので
すが、自分の作ったプログラムのウィンドウ上ではSetCursor()API
を使用するだけで可能ですが、それ以外のウィンドウではウィンドウ
のシステムで設定されているカーソルになってしまいます。
どなたか、自分のプログラム以外のウィンドウ上のマウスカーソルの
変更方法を知っている方はいらっしゃいませんか。
0683_NGNG
infファイル、あれ右クリックすると[インストール]と出ますよね。
で、[インストール]するとドライバが入るわけですが、
あれってどういう機構になっているんでしょうか?

なにかinfファイルを処理するコマンドに食わせているのか、
シェル?にそういう機構が組み込まれているのか。

インストーラからドライバを入れたいのだけど...。
どうしたらいいのか検討つきません。

どなたかご存知の方いらっしゃいませんか?

0684デフォルトの名無しさんNGNG
>>679
> うちはADSLモデム直なのでipconfigでもいいのですが
> 環境によって使えないのはどうかと思いまして
それは、しょうがない。そもそもルーター経由の場合は、ルーターのグローバル
アドレスの情報はルーターにしかないから取り様が無い。
ところで、何でグローバルアドレスを知りたいの ?
ついでに、一つのマシンに複数の IP アドレスが持てることは知ってるよね ?
0685デフォルトの名無しさんNGNG
>>683
> なにかinfファイルを処理するコマンドに食わせているのか、
> シェル?にそういう機構が組み込まれているのか。
explorer で関連付けされてるよ。うちのマシンだと...

C:\WINNT\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 %1

となっている。
0686デフォルトの名無しさんNGNG
>>681
遅レスですみません。そうです、そういうペンです。APIで設定次第で
できるようなものではないですか? PS_ENDCAP_FLATというのがあったんですが
あれはペンの角度がラインの角度と勝手に垂直になってしまうのです。
0687_NGNG
ソフトからディスプレイをオフにすることはできますか?
例えば、席をはずしたいがスタンバイはしたくない場合に
使いたいと思っています。
google などで検索してもわかりませんでした。
0688デフォルトの名無しさんNGNG
>>686
角度から計算して線の太さを変えてみたらどうか、と思ってみるテスト。
あるいはPolygonで平行四辺形を描くとか。
0689デフォルトの名無しさんNGNG
>>682
> 自分のプログラム以外のウィンドウ上のマウスカーソルの変更

勝手にされたらウザいからやめれ
0690デフォルトの名無しさんNGNG
>689
デスクトップキャプチャソフトとか作りたいんでないかい?
ドラッグで範囲指定できるような
0691デフォルトの名無しさんNGNG
ドラッグ中ならマウスイベントは自分のウィンドウに飛んでくるから
何も問題ないわけだが
0692デフォルトの名無しさんNGNG
>>688
あ、そっか。普通に計算して描画させればいいですね。
なるほど、ペンを使うことばっかり考えてました、
0693デフォルトの名無しさんNGNG
ドラッグじゃなくてクリック→クリックで範囲指定するキャプチャソフトもあるぞ。PSPとか。
マウスカーソルも変更されてるから>>690の言ってるような可能性もないわけではない。
0694デフォルトの名無しさんNGNG
こんばんは。どなたか教えてください・・・

マルチディスプレイ環境で、ディスプレイを指定して
(たとえばセカンダリ・ディスプレイに)Windowを
作るにはどうすればいいのでしょうか・・・

たとえば1024*768のディスプレイが2つ左右に並んでいる場合、
createWindowの引数でWindowの位置を(1300,200)とかに
すれば一応右側のディスプレイにWindowを作ることは出来ますが、
これだとディスプレイが上下にある場合に対応できない、等の
問題が生じてしまいます。必ずセカンダリディスプレイの中央に
Windowを生成したい、というときにはどうすればいいのでしょう??
0695デフォルトの名無しさんNGNG
>>694
EnumDisplayMonitors/GetMonitorInfo (98/2000以降ゆえ注意)
あたりでセカンダリディスプレイの座標系を調べて
そこにMoveするというのはどうかなあ
やったことないので実験結果プリーズ(はぁと)
0696デフォルトの名無しさんNGNG
>>694
EnumDisplayMonitors/GetMonitorInfo
0697694NGNG
>>695
>>696

 さっそくレスありがとうございます。
 また結果が出たら報告させていただきます。
0698デフォルトの名無しさんNGNG
>これだとディスプレイが上下にある場合に対応できない、等の
>問題が生じてしまいます。必ずセカンダリディスプレイの中央に
>Windowを生成したい、というときにはどうすればいいのでしょう??

ユーザが二つのモニタを左右に配置しているか上下にしているか
コードで知ることはできるのだろうか?
コード上では、いつも左右に配置していると仮定するとよいのでは?
0699デフォルトの名無しさんNGNG
>>683
infファイルの書式についてはPlatformSDKに簡単な説明があったはず。
ただ、深くまで知ろうとすればDDKが必要。
>>687
WindowMessage、SystemCommand(詳細忘れた。MSDN探せば直ぐ見つかる)
0700デフォルトの名無しさんNGNG
WinMain関数が呼ばれてから破棄されるまで、
第一引数のインスタンスハンドルの値が不変であることは保証されてますか?

クラスのprivateメンバに組み込もうか
必要になる度に呼び出そうか悩み中
0701デフォルトの名無しさんNGNG
>>700
不変というのが変数(第一引数)の値のことを言ってるのか
実際のハンドルのことを言っているのかよくわからん。

ハンドルは不変だし、
変数の方もローカルな変数である以上、
自分で書き換えるような真似をしなければ不変。
0702デフォルトの名無しさんNGNG
ごめん言い方まずかった・・・
というか、日本語間違えました

要はOSから割り当てられたアプリケーションのハンドルが
アプリケーションが終了するまで不変かどうか知りたかっただけです

ありがとう
0703デフォルトの名無しさんNGNG
あう・・・
>702=>700
で
>701へのレスでした
0704デフォルトの名無しさんNGNG
wsocketについて質問です。

socketで接続しデータを読み込む際
非同期で読み込みたいのですが
WSAAsyncSelec を利用するのはわかりましたが、

それ以外の方法はないのでしょうか?
(ウインドウを使わずにやりたい)
0705デフォルトの名無しさんNGNG
>>704
WSAEventSelect
0706デフォルトの名無しさんNGNG
iocp
0707デフォルトの名無しさんNGNG
iocpの銭形だ
0708デフォルトの名無しさんNGNG
穴�cかよ
0709デフォルトの名無しさんNGNG
スライダーを自前で描こうと思い、サブクラス化してWM_PAINTやらERASEBKGNDやらを
書き換えたんですが、つまみをぐりぐりいじったときの描画が微妙です。

こういったことを紹介しているサイトなどはありますでしょうか?
0710_NGNG
>>685
>>699
ありがとうございます。
その辺から攻めてみようと思います。
0711デフォルトの名無しさんNGNG
DrawText() とかで、任意の位置でワードラップしたいときは
自前でゴリゴリ書かないとダメですか?
0712デフォルトの名無しさんNGNG
関数はユーザの「任意」を知ることはできませんので
自分で書くしかないのでは
0713デフォルトの名無しさんNGNG
>>712
いや、80文字目で、とか。。。

まぁ自分でやるのは別にいいんですけど、
そういうワードラップ用コールバックが指定できる関数ありませんでしたっけ?
0714694NGNG
>>695
>>696
>>698

 ご返答ありがとうございました。

> やったことないので実験結果プリーズ(はぁと)

> ユーザが二つのモニタを左右に配置しているか上下にしているか
> コードで知ることはできるのだろうか?
> コード上では、いつも左右に配置していると仮定するとよいのでは?

 こんな感じでマルチモニタの情報をもらえました。
 (モニターを上下に配置したときの例)

(1つ目のディスプレイについて)
仮想モニタ上の位置(rect): (0, 0, 1600, 1024)
デバイス名: \\.\Display1\Unit0

(2つ目のディスプレイについて)
仮想モニタ上の位置(rect): (0, 1024, 1024, 1792)
デバイス名: \\.\Display1\Unit1
0715694NGNG
>>714
 ちなみに一つ目が1600*1024で二つ目が1024*768だった
時の例です。
0716デフォルトの名無しさんNGNG
ウインドウズのAPIに
ソニータイマー関数はありますか?
0717デフォルトの名無しさんNGNG
WindowsXPの一部の機種で、OSに処理を返さないプログラムが
画面に描画をしつづけると、10秒後ぐらいから描画がされないく
なってしまう現象があります。(内部での処理は正しく続く)

これってXPになってからの仕様なのでしょうか?
ちとすれ違いスマソ
0718デフォルトの名無しさんNGNG
> OSに処理を返さないプログラムが画面に描画をしつづけると、
OSに処理を返さないってどういう意味よ。
GetMessageやPeekMessageを呼ばないってこと?
もしそうなら、WM_PAINTの処理とは他のところで
直接描画してるってこと?

> 描画がされないくなってしまう現象があります。
> (内部での処理は正しく続く)
描画がされなくなるってどういう画面になるのよ。
正しく続くって、デバイスコンテキストの取得も
描画関数の戻り値も調べてみて成功しているってこと?

もっと具体的に説明しよう。
0719717NGNG
>>718
舌足らずですみません。

> GetMessageやPeekMessageを呼ばないってこと?
> もしそうなら、WM_PAINTの処理とは他のところで

そうです。
InvalidateRect(hWnd, &rc, TRUE);
UpdateWindow(hWnd);
で直接WM_PAINTを呼んでいます。

他のケースではモードレスでダイアログを立ち上げて
時間のかかる処理中で進捗状況を
SetDlgItemText(hWnd, IDM_CURRENT_STATUS, sTmp);
でループ中で書き換えています。

> 描画がされなくなるってどういう画面になるのよ。

画面が真っ白になってしまいます。

> 正しく続くって、デバイスコンテキストの取得も

戻り値は調べてなかったです。
これがおかしくなってたのかな?
ちと調べてみます。
0720デフォルトの名無しさんNGNG
>>719
>InvalidateRect(hWnd, &rc, TRUE);
>UpdateWindow(hWnd);
ループ中にメッセージ処理しなきゃ意味ないよね?
0721717NGNG
>>720
ん〜今までだとループに処理を戻さなくても
強制的に再描画してくれたのだが。
0722デフォルトの名無しさんNGNG
>>719
あ、それなら俺の環境(Win98SE)も似た現象が発生するよ。

Winを起動してからかなりの時間使った後に限ってだけど、
自前の画像ビューアとかIEとかで、大きな画像を表示させると、
描画されずにクライアント領域が全部真っ白(背景色)になる。
この時、小さい画像なら描画される。
(まるでシステムリソースが残っていないような感じ)

普通のメッセージループを使って、WM_PAINTでの応答で
BeginPaint
StretchDIBits
EndPaint
としているだけなんだけどね。

API関連の戻り値は全部成功を返してくるので、
アプリケーションレベルでは異常を認識できない。

1つのマシンだけで起きるので、ビデオカード(G400)の
ドライバに関連する問題かなって思って諦めてる。

>>720
ループなど必要なし。
自スレッドのウィンドウなら、
UpdateWindowを呼んだ時にWM_PAINTが送られてくる。
0723722NGNG
719=722です。
0724722NGNG
ごめん間違った。 722=718。
0725717NGNG
>>722
あ、Win98SEでも発生するんですか。
手持ちのマシンではThinkPad X24 のXPで発生するのと
客先のマシンで発生してます。(機種は不明)

自作のXPマシンでは問題ないのでやっぱりVGAのドライバに
依存するんでしょうかね。
(ただこちらでは起動後の時間には関係なく発生しますけど)

情報ありがとうございました。
客先には仕様だと言って逃げることにします。
0726722NGNG
>>725
あとは、ハンドルの解放忘れ等によるリソースリークが
起きてないかどうかを調べてみた方がいいかもね。
0727デフォルトの名無しさんNGNG
SetWindowRgn で楕円作ったつもりが楕円の下側が直線状に欠けてしまう
(メーターの表示板みたいな形)んですが,何が原因でしょうか.
0728デフォルトの名無しさんNGNG
>>727
ウィンドウからはみ出したとか・・・
0729デフォルトの名無しさんNGNG
使ったことないけど
クライアントのサイズ←→ウィンドウのサイズの差分だけ欠けてるとか。
0730デフォルトの名無しさんNGNG
CreateWindow での設定サイズをオーバー
0731デフォルトの名無しさんNGNG
タイトルバーが無くて
ウィンドウのサイズ変更もできない
ただ白い四角形が表示されるだけのウィンドウって作れますか?
0732デフォルトの名無しさんNGNG
>>731
もちろん。
0733デフォルトの名無しさんNGNG
>>716
VAIOシリーズにだけOEM供給されています
0734デフォルトの名無しさんNGNG
質問というかなんというか・・・
http://www.users.gr.jp/ml/archive/delphi/25766.asp
ここ見ると、
規約 順序 後始末
stdcall 右から左 関数
pascal 左から右 関数
cdecl 右から左 呼び出し側
と説明されてますが、
__pascalコールで呼び出す必要のあるWin32APIってありましたっけ。
一部(wsprintfなどは__cdecl)を除いて、__stdcallですよね?
windef.hを見てもPASCALは__stdcallと定義されてるし。
x86を前提とした場合は__pascalは使われないと考えて良いのでしょうか?
0735デフォルトの名無しさんNGNG
win16ではpascal使ってます
0736デフォルトの名無しさんNGNG
win32は無いかな。
0737びひゃ〜ん ◆CplusNDg NGNG
MFCだけど...MSDNのCWnd::GetFocusのリファレンスにはこんな記述が残ってるぞ。

static CWnd* PASCAL GetFocus( );
0738びひゃ〜ん ◆CplusNDg NGNG
ってよく読んだら、
「__pascal、__fortran、__syscall
の各呼び出し規約はサポートされなくなりました。」
と書いてある。>>734にあるようにPASCALはマクロだったのね。逝ってきます。
0739734NGNG
>>737
いや、ですから、そのPASCALの元定義は__stdcallになってます。
(windef.h参照)
0740デフォルトの名無しさんNGNG
>>737
741をよく読め。
> windef.hを見てもPASCALは__stdcallと定義されてるし。
0741734NGNG
色々ヘッダ見て回りましたが、どうやら__pascalは使われてないみたいですね。

>>738
あ、サポート外ってことでしたか。
これですっきりしました。

調べていただいた方々、ありがとうございまいた。
0742びひゃ〜ん ◆CplusNDg NGNG
>>739-740
ごめんなさい。
0743740NGNG
>>741
738の引用元はSDKでなくコンパイラのヘルプでしょ。
どちらにしろ使われてはいないだろうが。
0744740NGNG
>>742
いえいえ。こちらこそ、
> 逝ってきます。
って書かれた後に追い打ちを掛けてしまってすみません。
0745 ◆BkH732nY NGNG
TCP/IPで、構造体の送受信はどうやればいいのですか?
サンプル等あったら教えて下さい。
0746デフォルトの名無しさんNGNG
>>745
構造体もなにもバイナリで渡すだけだと思うのだが。
0747デフォルトの名無しさんNGNG
WinAPIでメールを送信する場合、一番楽なのはどれですか?
やはりMAPIでしょうか?数行でできないでしょうか?
0748デフォルトの名無しさんNGNG
>>747
つーかそんな変なの使わずともsocketで数〜十数行だと思うが。
0749748NGNG
とりあえず「socket smtp」で検索すれば沢山出てくるよ。
0750デフォルトの名無しさんNGNG
休止状態をサポートしてるかどうか調べるAPIおしえてくださいまし。
0751デフォルトの名無しさんNGNG
>>748-749
いや SMTP等をもってくるのが めんどくて
0752デフォルトの名無しさんNGNG
smtpを持ってくるってなんだ?

あと、数〜十数は言い過ぎ。
確かに、送信部分だけならそうなるけど、
q-printとかbase64エンコードも事実上必須だし。
0753デフォルトの名無しさんNGNG
>>752
送信だけならbase64だけでいい
あと必要なのはShift-JISからJISの処理だね
しかしbase64もShift-JIS->JISもSMTPとは関係ない
MIMEとSMTPをごっちゃにしないほうがいいよ
0754デフォルトの名無しさんNGNG
>事実上必須

読めないのか?
0755デフォルトの名無しさんNGNG
nkf使えばいいじゃん
0756デフォルトの名無しさんNGNG
ShellExecute(0,0,"mailto:[email protected]?subject=test&body=aborn_me",0,0,SW_SHOWNORMAL);
送信ボタンは手で押せ。
0757デフォルトの名無しさんNGNG
>>746
敢えて言えば、バイトオーダーや型のサイズの違い(time_t が 32bit か 64bit か)
に気をつけよう、ってとこかね。
0758デフォルトの名無しさんNGNG
スレッドを使うLIBをDLLから間接的に呼び出しているのですが、
クライアントが終了すると、LIBのスレッドがクリーンナップを
経ずに強制終了してしまいます。

クライアント ==> DLL ==> LIB
DLL in
LIB in
クライアント in
クライアント out <<-- ここでLIBのスレッドが強制終了
LIB out
DLL out

スレッドを使っているLIBを安全にDLLから呼び出す方法はありますか?

もう一つ、クライアントでMFCを使っていると、LIBで確保しているメモリの
誤リーク検出をして、非常に鬱陶しいので、こっちもお願いします。
0759デフォルトの名無しさんNGNG
>>753
送信だけならMIME/base64自体不要だと思うが
0760デフォルトの名無しさんNGNG
dllmainのPROCESS_DETACHでLIBのスレッド終了を
待てばいいのでわ?
0761750NGNG
まじでおせーてください。
0762デフォルトの名無しさんNGNG
>>759
添付ファイルはど〜やんの?
0763デフォルトの名無しさんNGNG
送信だけ派:
 送信前にすべてのデータは整っている

mimeも必要派:
 >一番楽なのはどれですか?
 こんな事を言っている奴が下準備を済ませているとは考えられない
0764デフォルトの名無しさんNGNG
>>753、>>759
SJIS垂れ流しだけはやめてほしい。
0765デフォルトの名無しさんNGNG
ピリオドのエスケープを忘れて、
メールが切れるとサーバー設置した会社に苦情をつけるな、たぶん。
0766デフォルトの名無しさんNGNG
ESMTPでSJIS直接送るのと、
SMTPでUTF-7で送るのはどちらが
罪深い行為でしょうか?笑い、
0767758NGNG
>>760
PROCESS_DETACHの前にLIB内のスレッドが閉じられてしまうんです。
スレッドのメッセージキューにも、何の通知もないし、お手上げ状態です。
0768デフォルトの名無しさんNGNG
>>766
添付ファイルでSJIS生のテキストどころかバイナリファイルまで平気で
送られまくってるのにメール本文になるととたんに叩かれるのが
不思議でなりません。どちらもmultipartの一員なのに。
0769デフォルトの名無しさんNGNG
そんなの聞いた事ねー
0770デフォルトの名無しさんNGNG
バイナリだろうがテキストだろうが、
添付ファイルはエンコードして送ってると思うが・・・
0771デフォルトの名無しさんNGNG
起動側の 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 しているといまく行かないのでしょうか?
0772デフォルトの名無しさんNGNG
ソケットはプロセスセーフじゃないよ
あと一度recvしたら受信バッファからデータは消える
消したくないならrecvの引数にMSG_PEEKを指定しる
0773 NGNG
>>771
引数に親のプロセスIDを追加して、子プロセスでDuplicateHandleしれ。
また、もしOSが9x系なら、親が明示的にハンドルを継承可能としてやる
必要がある。
0774 NGNG
>>772
プロセスセーフってどういう意味?
0775デフォルトの名無しさんNGNG
>>774
プロセスチーズってどういう意味?
0776 NGNG
>>775
数種類のナチュラルチーズを加熱溶解し、乳化剤を加えて乳化させ、
それを型に入れて作ったものがプロセスチーズです。
0777デフォルトの名無しさんNGNG
>>776
ありがとうございます。正常動作するようになりました。
0778771NGNG
れすthxです(^^ゞ

>>772
サイズ 10 のうち、4 だけ読み込んでも受信バッファから消えてしまうのですか?

>>773
CreateProcess の fInheritHandle を true にしてますが、
これだけではダメで、DuplicateHandleも必要ということですか?

0779デフォルトの名無しさんNGNG
>>778
10bytes中4bytes読んだのなら受信バッファには6bytes残る
0780771NGNG
お世話になっております(^^ゞ

>>773
http://support.microsoft.com/default.aspx?scid=kb;ja;JP150523
ここを見てみると、
NTでは、特に DuplicateHandle は要らなそうだと思ったんですがどうなんでしょうねぇ?

>>779
ですかぁ
ちゃんと、SOCKETを継承できれば
親で先っちょだけ読んで、子で残りを読めるということですね
0781デフォルトの名無しさんNGNG
シェルのアイコン(「お気に入り」など)を取得するにはどうしたら良いですか?

一応、フォルダパスを取得 → SHGetFileInfo で実現できてるんですが、
もっとストレートに取得できないかな...と。
0782781NGNG
というか、フォルダパスを取得 → SHGetFileInfo の方法では、例えば
お気に入りのフォルダのアイコンを、ユーザが変えていると破綻するので...
0783デフォルトの名無しさんNGNG
API初心者です。CreateProcess関数でソースコードのわからない(自作じゃないアプリ)を制御することは
できますでしょうか?
0784デフォルトの名無しさんNGNG
CreateProcessでソースコードの分からない(自作じゃないアプリ)を起動することはできますが?
0785デフォルトの名無しさんNGNG
CreateProcessを使ってソースコードの分からない(自作じゃないアプリ)を
起動して、そのソースコードの分からない(自作じゃないアプリ)を
強制終了することもできますが?
0786デフォルトの名無しさんNGNG
>>783
制御って具体的にはどんなふうに?
0787デフォルトの名無しさんNGNG
>>782
何で破綻するのかわからん。
変えていればその変えているアイコンを取得できると思うが。
0788781NGNG
>>787
書き方悪かった。desktop.iniを削除(滅多に無いかもしれないけど)していたり
すると、普通のフォルダのアイコンが取得されてしまう。
0789787NGNG
>>788
だからその場合、普通のフォルダアイコンが正しいんでないの?
0790デフォルトの名無しさんNGNG
>>784,785,786
ありがとうございます。
ソフトを軌道した後にプログラムから操作(例えばファイルを開くなど)を加えることはできるんでしょうか?
0791デフォルトの名無しさんNGNG
ファイルを開く・・・ねぇ。
コマンドライン引数を与えて起動させれば開くんじゃないの?
0792デフォルトの名無しさんNGNG
MesseageBox と Ifをつかって

はい いいえのプログラヌを造りたいのですが
______
  ↑
之の名前がわかりません
0793デフォルトの名無しさんNGNG
>>792
そうですか。
0794デフォルトの名無しさんNGNG
>792
ガッカリだ!
0795デフォルトの名無しさんNGNG
なんていったかな?
0796デフォルトの名無しさんNGNG
フーン
0797711NGNG
続きです。

子プロセスで recv しようとしたら
 10093 WSANOTINITIALISED WinSockシステムが初期化されていない。
って怒られたので、WSAStartup() を追加した。

すると今度は
 10038 WSAENOTSOCK 指定されたソケットが無効である。
って出るし・・・

訳わからんです(ToT)
結局、
ちゃんと SOCKET が継承されていないんだろうなぁ(´ヘ`;)ハァ

今日は帰って、頭冷やして明日やりますです。
レス下さった方、ありがとうございましたm(__)m

ではでは
0798デフォルトの名無しさんNGNG
>>792
MB_YESNO
0799771NGNG
>>797
自己レス
訂正 711→771(汗
0800デフォルトの名無しさんNGNG
>>790
べつにCreateProcessしなくても逝けるぞ
メニューの動作をエミュレート(WM_COMMAND送信)するとか、
手作業の段階をWM_KEYDOWNとかkeybd_eventとかで再現するとか。
0801デフォルトの名無しさんNGNG
DDEやOLEオートメーションに対応してるならそれ使うとか
0802デフォルトの名無しさんNGNG
>>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;
}
0803デフォルトの名無しさんNGNG
仮想キーコードから、他のキーコードとは重ならない文字列を作ることはできますか?
 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 などもうまくかないようです。
0804デフォルトの名無しさんNGNG
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);
0805デフォルトの名無しさんNGNG
なるほど Extended-key flag は個別対応でガシガシですか。
どうもありがとうございます。
0806デフォルトの名無しさんNGNG
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 が未解決です。
と言われてしまいます。
どうしてでしょうか?
0807デフォルトの名無しさんNGNG
Windows NT/2000:Windows NT 4.0 以降
Windows 95/98:サポートされていません。
ヘッダー:winbase.h 内で宣言
インポートライブラリ:kernel32.lib を使用

NT系であることを明示しろ。
リンクエラーはextern "C"
0808デフォルトの名無しさんNGNG
>>807
ありがとうございます。

#define _WIN32_WINNT 0x0500

で逝けました。
0809質問NGNG
質問
Win98SEでVc6sp5を利用して
画像の印刷プログラムを書いています。

プリンタを示すDCにStretchDIBitsで
300*400程度のイメージを書き込むことには成功するのですが。

色々問題が発生します。
1 デジカメで撮影した1600*1600くらいの画像を貼り付けると失敗して表示されない。
2 そこそこのサイズを2枚はると失敗して何も表示されない。
3 困ったことにエラーが帰ってこない。

そこでプリンタDCを使わないでスクリーンから生成したメタファイルを
使って同じようにDIBを貼り付けてみたところ。
同じ症状になりました。

なにか解決方法はあるのでしょうか?
0810デフォルトの名無しさんNGNG
>>809
貼り付けようとしてるDIBは正しいか?
(ファイルに保存してペイントとかで開けるか?)

StretchDIBitsでディプレイに表示することができるか?

SetStretchBltModeでHALFTONEとか指定してないか?

あと、JPEGとかPNGを書き込もうとしてるけど、
ドライバが対応してない(あるいはバグがある)とか?
0811画像分割は避けたい。NGNG
>>810
StretchDIBitsで画面表示も印刷も出来ます。
BltModeは無指定です。
データはBI_RGBのDIBで、Jpegではありません。

小さな画像なら印刷も画面表示も成功します。
ただ
300万画素程度のデジカメで撮影したデータをA4一杯に広げて印刷を
かけると失敗します。

自己レスみたいですが
画像印刷について方々を調べて廻ると、
1 印刷はStretchDIBitsを使わないと失敗する。
2 24bit無圧縮のDIBを使う事、DDBは印刷できない。
3 大きなBitmapは分割して転送する。

とあります。
多分今回の問題は転送するデータが巨大?だった為でしょう。
しかし これはあくまでプリンタードライバーを経由する
問題の為であり、印刷時に限って起こる問題と思います。
メタファイルを画面のDCから取得する場合は
その制限を受けないものと考えられますが、
実際は同じ症状になります。
うーん困った。
画像分割は処理がめんどくさすぎる。
第一成功するかどうかわからん。
0812デフォルトの名無しさんNGNG
外してると思うが、
そのプリンタでは
GetDeviceCapsでRASTERCAPSを取ったとき、
RC_STRETCHDIBがないとか(w
0813デフォルトの名無しさんNGNG
>>811
719,722辺りに書かれている症状と少し似てるね。
0814デフォルトの名無しさんNGNG
ウインドウの上下関係をいじるにはどうすればいいでしょう?
0815デフォルトの名無しさんNGNG
>>814
Zオーダーのこと?
それとも、単なる座標のこと?
まぁ、どちらにしてもSetWindowPosを使う
0816 NGNG
>>813
症状は同じですね。
小さな画像は正常に動作し、大きな画像は真っ白になるが
APIは全て正常値を戻す。

こちらも原因調査中です。
新たにわかったことは
1 1024*1024以上のBitmap?の転送は失敗しやすい。
2 16BitのAPIを通過する処理はリソース制限を非常に受けやすい

現在画像分割処理で調査中・・あぁー面倒だぁ。
これで失敗したら手詰まりだぁ。
0817デフォルトの名無しさんNGNG
>>816
>>816
症状の切り分けとして、
単に巨大な画像を送るとコケやすいのか
拡大して、巨大にするとコケやすいのか
を判別してみたら?
SetDIBitsToDeviceとかで、等倍でデカいのを送ってみるとか
0818817NGNG
何か1行余分だけど、
単なるミスです。他意はありません。
0819デフォルトの名無しさんNGNG
他のアプリケーション内のエディットコントロールのテキストを取り出すにはどうすればいいですか?
WM_GETTEXTなどはいくらSendMessageしても届いてないようです(Spy++で確認)

よろ
0820デフォルトの名無しさんNGNG
GetWindowText
は昔の時代にはそのまま通った気がする。
いまはNTの時代だからプロセス境界を真っ当に超える
フック+共有メモリ(FileMappingによる)あたりが妥当か。
0821デフォルトの名無しさんNGNG
なぜ、COMを使わない? HRESULT GetEditText([out, retval]BSTR* pResult);
0822819NGNG
>820
ども。
共有メモリを作ってそこに吐き出させようとしているのですが
メッセージ自体が届きません。
フックとおっしゃってますから、メッセージでテキストを吐かせるというアプローチ自体がちがうと言うことかな?
フックって具体的に何をフックしますか?
いろいろ聞いてスマソ

>821
COMを全く理解してない物で・・
0823デフォルトの名無しさんNGNG
ウインドウを間違えているという落ちではなかろうな。
0824デフォルトの名無しさんNGNG
>821
それは、「他のアプリケーション」のコードに
手を出せることが条件では?
「他人のアプリケーション」でも有効なのか?
0825821NGNG
>>824
>「他人のアプリケーション」でも有効なのか?
しゅーん。すまそん。
0826819NGNG
>823
その可能性も疑ったのですがSpy++で確認したところ
ターゲットに送っているハズです。
ちなみに時プロセス内に用意したエディットには正しく処理されます。
ウインドを選んでメッセージを投げる部分はプログラムになっているので
手で打ち間違えたとかそう言う可能性はなさげです
0827デフォルトの名無しさんNGNG
普通のエディットコントロールはCOMのインターフェイスもってないぞ
0828821NGNG
でたらめ言ったおわびに、リクターのナポレオン本(Advanced Windows)調べたよ。
結論から言うと、NT4では可能(Advanced Windowsのターゲット)。ならば、2000やXP
でも可能ではなかろうか?
ミソは、user32内で、WM_GETTEXTLENGTHを最初に呼び出し、共用メモリーにその長さ
を割り当て、次にWM_GETTEXTを実行する(アプリケーション側はWM_GETTEXTLENGTH
呼ぶ必要はない)。ということろを考えると、823の予測が正しいと思われ。
そもそも、自プロセス内のHWNDしか取れないAPIを呼び出して、それを利用している
という可能性は?
0829デフォルトの名無しさんNGNG
>>819
> WM_GETTEXTなどはいくらSendMessageしても届いてないようです
WM_GETTEXTは他のプロセスでも取得できますが?
0830デフォルトの名無しさんNGNG
ラジオボタンをアプリ起動時にチェックさせたいです。どうすればいい?
猫でもわかるプログラミングで紹介されてるけど、そのとおりにやってもうまくいきません。

あと、ラジオボタンのどの項目がチェックされてるかを調べるのにはどうすれば?
0831819NGNG
とりあえずいろいろ調べてみたところ時々メッセージは届くようです
10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます
でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。
0832あNGNG
>830
もうちょっと詳しく書いたら?
うまくいかないならどう上手くいかないのかを
書くのが礼儀と思うんだが。
0833画像印刷、分割失敗NGNG
>>810
>>813
>>816
StretchDIBの処理を改良して
巨大Bitmapを100*100に分割して転送するように処理を修正しました。
結果
20枚?程転送すると急に何も転送しなくなり(APIはエラーを戻さない)
(つまり虫食いの画像が出来上がる。)
さらに転送するとhDCの他のデータも全て消えてしまいます。
(先に書き込んだ部分も含めて)
書き込み先のコンテキストはメタファイル、PrinterDC共に失敗でした。

考察
bitmapの転送はサイズが巨大でも、書き込む回数が多くてもダメと言うことです。

お願い!!
もうメタファイルは諦めるしかないかも。
頼むーー誰かヒントをください
0834デフォルトの名無しさんNGNG
>>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使ったらコンパイルはできるけど、起動したら使ってない時と変わらないです。

助けてください
0835デフォルトの名無しさんNGNG
>>819
> でもそれらをローカルにReadProcessMemoryすると内容は'00'でした。
WM_GETTEXTは他のプロセスでも直接取得できますが?
ReadProcessMemoryは何のために?
0836デフォルトの名無しさんNGNG
>>834
> Button_SetCheckとButton_GetCheck
#include <windowsx.h>

> SendMessage使ったらコンパイルはできるけど、
> 起動したら使ってない時と変わらないです。
目的のラジオボタンのウィンドウハンドルは
間違いなく取得できてるの?
実際にはSendMessageをどのようにソースに記述したの?
0837819NGNG
>835
ホントだ・・。どうもありがとうございます。
実はゴールはエディットではなくて試しにエディットを使ってただけなので
もうしばらくReadProcessMemoryなどの使い方をチェックしてみます。
(たぶんこの方法でもうまくいくはずだしこれで動かせないと困る……)
0838デフォルトの名無しさんNGNG
>>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;
以下省略
0839デフォルトの名無しさんNGNG
ダイアログベースのアプリケーション作ってるんだけど・・・
右上のバッテン押したら終了するようにするにはどうすればいいですか?
0840836NGNG
>>838
ダイアログウィンドウに送信してどうすんのよ?
というか上に書いた回答をもっとよく読め。

SendMessage(GetDlgItem(hDlg, コントロールID),
    BM_SETCHECK, BST_CHECKED, 0);
または
SendDlgItemMessage(hDlg, コントロールID,
    BM_SETCHECK, BST_CHECKED, 0);
または
CheckDlgButton(hDlg, コントロールID, BST_CHECKED);
0841836NGNG
補足。
ラジオボタンの場合、初期化時以外は
CheckRadioButtonをおすすめする。
0842デフォルトの名無しさんNGNG
>>839
モーダルかモードレスかで答えが変わってくる。
つーか出来てないということはモードレスかな?
0843デフォルトの名無しさんNGNG
>>842
教えてください
0844デフォルトの名無しさんNGNG
>>843
だからモーダルとモードレスどっちなのよ?
0845デフォルトの名無しさんNGNG
>>844
モードレスです
0846デフォルトの名無しさんNGNG
>>845
WM_COMMANDで かつ LOWORD(wParam)がIDCANCELのメッセージか、
または WM_CLOSEメッセージを
捕まえて DestroyWindowすべし。
WM_COMMANDで処理したいなら、WM_CLOSEメッセージにはFALSEを返すべし。
0847デフォルトの名無しさんNGNG
LOWORD(wParam)って何をしているのでせうか?
詳細キボンヌ
0848デフォルトの名無しさんNGNG
>>847
それくらい、includeディレクトリの中見て自分で調べろよ。全部大文字ってことは
マクロだから、見りゃわかるだろ。
0849847NGNG
>>848
わかんねーよ。だからキーテンだろーが
何様だ、おまえ?
0850デフォルトの名無しさんNGNG
>>847=>>849
逆切れかっこ悪い。それぐらい自分で調べられないなら、あきらめろ。
0851あNGNG
>849
おまえこそ知らない人に
ものを教えてもらう立場にあるというのに
なんだその口の利き方は?

まぁいい。マジレスしてやる。
>847
>848と同じだがincludeディレクトリの中身見ればわかる。
というより右クリック定義うんたらで飛べるはず。
もし、即ヘッダ見るということを思いつかないなら
まだAPIは早い。
Cでもやってるべし。
0852デフォルトの名無しさんNGNG
LOWORD() の関連質問なんですが、

DWORD a;
WORD b = ( WORD ) a ;
WORD c = ( WORD )( a & 0xFFFF ) ;

LOWORDの define は c ですね。
で、何でわざわざ c のような変換をするのか分かりません。
bより c のような変換の方が安全(?)とかそういうのがあるんでしょか?
0853デフォルトの名無しさんNGNG
外してたらスマソ。今、考えたとこで検証したわけじゃないんでね。
char ch = -1;
WORD c = LOWORD(ch);
とやった場合であっても、c = 0xff となって欲しい。
もし、WORD b = (WORD)ch; と展開すると、b = 0xffff となる。
からじゃないかな?
識者の突っ込みキボーン。
0854デフォルトの名無しさんNGNG
>>852
WIN32環境ならばどちらでも変わらない(別に0xFFFFを付ける必要はない)
けど、仮にWORDが16ビットより大きいサイズの処理系が
あったとすれば、そこでは 0xFFFFが大きな意味を持つ。

ちなみに俺のVC++5.0はヘッダファイルが古いからか
#define LOWORD(l) ((WORD)(l))
と定義されてるよ。

>>853
どちらの場合も結果は 0xFFFFですが。
0855853NGNG
>>854
逝ってきます……
64bit Windows用の定義が追加されたってことなのかな?
0856852NGNG
>853-855
どうもです。
  >仮にWORDが16ビットより大きいサイズの処理系があったとすれば
ということで納得です。
0857デフォルトの名無しさんNGNG
>10回に1回くらいはWM_GETTEXTが4バイトのテキストをコピーしてくれます
4バイト……
……ポインタのサイズ?
0858デフォルトの名無しさんNGNG
DWORDってDouble Word の略でしょ?
Wordってどういう意味がある変数型なの?
あと、Doubleが付くことで意味が違ってるの?
0859デフォルトの名無しさんNGNG
WORD
 ASCII文字1文字分
  =1バイト=8bit

DWORD
 ASCII文字2文字分
  =2バイト=16bit
0860デフォルトの名無しさんNGNG
ごめん間違えた

WORD
 ASCII文字2文字分
  =2バイト=16bit

DWORD
 WORD2個分
  =4バイト=32bit
0861デフォルトの名無しさんNGNG
>>859
それじゃ Character だよ。
WORD は、もともとはプロセサが普通に処理できるデータの大きさ。
C 言語言うところの int と同じ概念。
MS が使いだしたのが、8086〜80286 の頃だったので、16bit になって
今日に至る。DWORD はその倍のビット幅 (=32bit)
0862デフォルトの名無しさんNGNG
>>861
プッ
0863デフォルトの名無しさんNGNG
IA-32では
WORD =16bit(2byte)
DWORD=32bit(4byte)
QWORD=64bit(8byte)
が慣例だね。

> WORD は、もともとはプロセサが普通に処理できるデータの大きさ。

のようにCPUにより異なるから注意しよう!

ってここアセンブラのスレだったっけ?
0864デフォルトの名無しさんNGNG
>>863
プッ、そんなんでアセンブラしてるつもりになってるよ
0865デフォルトの名無しさんNGNG
>のようにCPUにより異なるから注意しよう!
正しくは、定義により異なる。
0866デフォルトの名無しさんNGNG
> アセンブラしてる
ぷぷっ
0867デフォルトの名無しさんNGNG
SPARCなんかだとWORDは4byteが慣例だったなあ
sagesage
0868デフォルトの名無しさんNGNG
Window(DC)に描画途中の画面を表示させ無いようにする、
HSPでいうredraw 0とredraw 1のような感じのAPIってありませんか?
0869デフォルトの名無しさんNGNG
CreateCompatibleDC
CreateCompatibleBitmap
etc...
0870868NGNG
やっぱし自分でバッファ確保しないと駄目ですか。
それならそれでオッケーでス。ありがとうさようなら。

もう会うことは余り無いでしょう。
0871デフォルトの名無しさんNGNG
アセンブラとアセンブリの違いにこだわっているやつほど通常の会話に変な日本語を使っているやつが多い。

マーフィーの法則 第23条の18より
0872デフォルトの名無しさんNGNG
(´-`).。oO(>>871は自分の文章が変なことに気づいているのだろうか…)
0873デフォルトの名無しさんNGNG
どこもおかしくねーぞ(藁
むしろ>871のは文章じゃなくて文なわけだが
0874871NGNG
>>872
マーフィー本は俺のプログラマ生活にとって欠かせない、
いわばバイブル。条項もすべて暗記した。
が、アセンブリとアセンブラの意味については
未だよくわかっていない。
0875デフォルトの名無しさんNGNG
>アセンブラしてるつもり
ウケタ
0876デフォルトの名無しさんNGNG
>>873
「〜やつほど〜やつが多い」は明らかに変だが。
0877デフォルトの名無しさんNGNG
アセンブラー:アセンブルするひと。
アセンブリ:アセンブリ言語。言語名。
アセンブル:アセンブリ言語を機械語コードに直すこと。
・・・と思う。
0878デフォルトの名無しさんNGNG
>>877
> アセンブラー:アセンブルするひと。
ふつーは処理系の方を指す。nasm とか gas とか。
0879デフォルトの名無しさんNGNG
.NETではアセンブリはまた違う意味が
0880デフォルトの名無しさんNGNG
アセンブラって、
アセンブリ言語を機械語コードに直すソフトのことだよね?
昔、「ブリをブラでブルする」と覚えた気が・・・。
0881デフォルトの名無しさんNGNG
おまえらスレ違いもいいとこなので移ってください。
http://pc3.2ch.net/test/read.cgi/tech/1016991911/l50
0882デフォルトの名無しさんNGNG
ダイアログボックスにアイコン付けたいんだけど、どうしたらいいかな?
0883デフォルトの名無しさんNGNG
WM_SETICON
SetClassLongでもまあできないこともない。
0884デフォルトの名無しさんNGNG
Win32系で64bitの変数扱いたい場合どうしたら良いですか?
コンパイラはBCC5.5.1です
0885デフォルトの名無しさんNGNG
LONGLONG
0886デフォルトの名無しさんNGNG
int_64(コラ
0887デフォルトの名無しさんNGNG
LONGSHORT
0888デフォルトの名無しさんNGNG
どうやらBorlandC++は__int64という型のようでした

ところで追加質問になってしまうんですけど
printfとかで64bitの整数を文字列にする事ってできないんですか?
%dだとintサイズだし、色々調べてllとか付けて見てもNGでした
0889デフォルトの名無しさんNGNG
>>888
> printfとかで64bitの整数を文字列にする事ってできないんですか?
使ってるライブラリによる。Borland は知らんが VC の MSVCRT.DLL だと
プリフィクス I64 だね。
0890デフォルトの名無しさんNGNG
>>888
ヘルプによると "%Ld" らしい。
0891デフォルトの名無しさんNGNG
GetOpenFileName でファイルの種類ごとにデフォルトの拡張子を指定するのにはどうすればよいのでしょう。
試しに
 lpstrDefExt = "txt\0htm\0ini\0doc\0";
みたいな感じでやってみましたが駄目でした。
フックを使って lpstrDefExt を変更するという手も考えたのですが、
フックを使うとプレースバーが表示されなくなってしまうようです。
どなたかおねがいします。
0892デフォルトの名無しさんNGNG
>> フックを使うとプレースバーが表示されなくなってしまうようです。

古い OPENFILENAME の代わりに、FlagsEx が追加された新しい OPENFILENAME を使えばいいんじゃないかな(推測)。 #if (_WIN32_WINNT >= 0x0500) で囲まれてるやつ。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/commondialogboxreference/commondialogboxstructures/openfilename.asp
0893デフォルトの名無しさんNGNG
>890
無事表示できました
ありがとう
0894891NGNG
>>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 );
0895デフォルトの名無しさんNGNG
http://sakashita.strangeworld.org/source/up0768.jpg
これってどうやったら出来るんだろう?
SDKでやってるのかな?
0896デフォルトの名無しさんNGNG
>>895
対象 URL
http://sakashita.strangeworld.org/source/up0768.jpg
--------------------------------------------------------------------------------

mailto ストーム
アンカータグではないタグで mailto: の記述が見つかりました。
メール作成ウィンドウがたぁっくさん出てきてしまうかもしれません。
パワーのないマシンでは,ブラウザがフリーズする可能性があります。
--------------------------------------------------------------------------------

FDD アタック / concon クラッシャー等 [img タグ等]
IMG タグや JavaScript 等により file スキーマを参照します。
ブラウザの設定によってはフロッピーディスクドライブに不要なアクセスが続いたり, OS がクラッシュする可能性があります。
0897デフォルトの名無しさんNGNG
>>895
ム板に、しかも今時こんなブラクラ貼るなんて(・∀・)イイセンスしてるな。
0898デフォルトの名無しさんNGNG
やりかたを質問してるのでは?
0899デフォルトの名無しさんNGNG
ウィンドウプロシージャ側でコマンドライン引数を利用したいのですが
グローバル変数とメッセージ、どちらで伝えるべきですか?
0900900get!!NGNG
>>899
グローバル変数の方が楽だろうな
GetCommandLine()を使うのもありだろ
0901デフォルトの名無しさんNGNG
>>899
CreateWindowの引数という手もあり
0902デフォルトの名無しさんNGNG
GetCommandLine()ですか。
どうやらこれがよさそうですね、ありがとうございます。
0903デフォルトの名無しさんNGNG
PSH_WIZARD なプロパティシートで「キャンセル」ボタンを非表示にしたいのですが、
そんなことってできるのでしょうか?
0904デフォルトの名無しさんNGNG
>>903
GetDlgItem(IDCANCEL)でキャンセルボタンのCWnd*とれたかも
0905904NGNG
すくなくともVC5の時に普通の(ウィザードでない)プロパティシートではできた
CPropertySheetの派生クラスを作ってOnInitDialog()をオーバーライドして
CPropertySheet::OnInitDialog() ;
CWnd *pwndCancel = GetDlgItem(IDCANCEL) ;
pwndCancel->ShowWindow(SW_HIDE) ;
こんな感じか(あってるかどうかしらん)
0906デフォルトの名無しさんNGNG
>>904,905
スレ違い。
0907904NGNG
Win32Apiスレだった
904,905はMFCの場合
0908904NGNG
>>906
イッテキマース
0909906NGNG
>>908
逝かなくてもいいよ。
十分ヒントになったはず。
0910あえて言うとNGNG
>>903 キャンセルできないウィザードというのはいかがなものか。
0911デフォルトの名無しさんNGNG
×ボタンを押して閉じれば良し。
0912デフォルトの名無しさんNGNG
UIとしてあんまり、、ね。
0913デフォルトの名無しさんNGNG
×ボタンってあったっけ?
0914デフォルトの名無しさんNGNG
標準にすると右上にあると思う
0915903NGNG
盛り上げて下さってどうもありがとうございます。903でございます。

「戻る」「次へ」に対してキャンセルができないのは確かにダメダメだと思いますが、
「完了」があるなら「キャンセル」は要らないと思うのですけれども
どんなもんでしょうか?

んで、やっぱり GetDlgItem() しないとダメなのですかね?
あんまり美しくねーなー…
0916デフォルトの名無しさんNGNG
>「完了」があるなら「キャンセル」は要らないと思うのですけれども
凡人には理解できません。
どういう論理ですか?
0917デフォルトの名無しさんNGNG
>>915
あなたの作るソフトは一生使わないと心に固く誓いますた。
0918デフォルトの名無しさんNGNG
>>915は初心者板へ行ってアプリの使い方から勉強しる
0919デフォルトの名無しさんNGNG
画面のハードコピー処理のプログラム(私がプログラミングしてものではありません)で、
殆どのPCでは印刷に成功するのですが、中には印刷出来ないPCがあります。

印刷まで行かないPCの失敗箇所は、
CreateCompatibleBitmapで作ったビットマップを
SelectObjectで選択するところでNULLが返却されています。

機種またはPCごとの設定で何か違いがあるのでしょうか?
私自身まだ詳しくないので、わかりづらい説明で申し訳ありません。
0920デフォルトの名無しさんNGNG
完了だと、指定した内容で何らかの動作が実行されてしまったり、設定内容が保存されてしまったりするじゃないですか。実際は知らないけど、少なくともイメージ的には。
それに対して、つまりキャンセルしたいんですよ。何の動作も行わせたくなかったり、設定内容を保存したくなかったり。
0921デフォルトの名無しさんNGNG
じゃあキャンセル封じんなよ
ネタか?
0922デフォルトの名無しさんNGNG
支離滅裂だな。ネタ認定。
0923デフォルトの名無しさんNGNG
>>921-922
ネタにしたいから焦ってるのか?
どうして、920が903=915と同一人物だと
思っているのか小一時間問い詰めたい
0924デフォルトの名無しさんNGNG
今日の目標:誰宛のレスなのかを明確にしよう。
0925デフォルトの名無しさんNGNG
結論:ウィザードに限らずダイアログにはキャンセルを実装しよう。
0926デフォルトの名無しさんNGNG
目標:出来れば人生のキャンセル方法も議論してみよう
0927903NGNG
ごめん。漏れ勘違いしてたのかな。ウィザードって

 �@何とかウィザードにようこそ!(戻る|次へ|キャンセル)
 �A条件1設定(戻る|次へ|キャンセル)
 �B条件2設定(戻る|次へ|キャンセル)
 �C次へを押すと実行します(戻る|次へ|キャンセル)

  〜ここで実行〜

 �D実行しますた(戻る|完了)

だと思ってたけど違うの?ひょっとして

 �@何とかウィザードにようこそ!(戻る|次へ|キャンセル)
 �A条件1設定(戻る|次へ|キャンセル)
 �B条件2設定(戻る|次へ|キャンセル)
 �C完了を押すと実行します(戻る|完了|キャンセル)

  〜ここで実行(ウィザード閉じる)〜

 �D実行しますた(メッセージボックス)

だったりする?




0928デフォルトの名無しさんNGNG
>>923
アタマだいじょうぶ?ぼく
0929デフォルトの名無しさんNGNG
どのウィザードをもって判断してるんだろう・・・
0930デフォルトの名無しさんNGNG
>>927
実行した後で戻れるプログラムって、怖いけど見てみたい。
0931デフォルトの名無しさんNGNG
ブラウザを比較しよう part 2
http://pc3.2ch.net/test/read.cgi/software/1032017120/

このスレから飛んできたのですが、教えて下さい。
IEの起動がMozillaよりも速いのは、MSが隠しAPIを使っているからだと
言っているのですが、そんなことってあり得るんですか?
勿論、隠しAPI使うことは否定しませんが、それで速度にものすごく差が出るんですか?
0932903NGNG
ごめん。間違えた。眠気が。。。
前者の�@と�Dには「戻る」はないです。
そういうのってなかったっけ?
0933デフォルトの名無しさんNGNG
>>932
それなら最初からそう説明しないと、ずっとキャンセルボタンが無いのかと思われるよ。
そういうウィザードはある。もしくはキャンセルボタンなどの使わないボタンを使用不可にするとか。
0934デフォルトの名無しさんNGNG
ファイルの非同期読み書きは

どのようにすればよいのでしょうか?
0935デフォルトの名無しさんNGNG
CreateFile で FILE_FLAG_OVERLAPPED 付けて、
ReadFileEx, WriteFileEx使えばええんでわ?
0936デフォルトの名無しさんNGNG
>>931
単にIEがOSの一部だから、起動時にロードされてるんだろ
隠しAPIの10や20使ってるとは思うが・・・
0937771NGNG
>>802

亀レスでスマソ

CreateProcessするところを、別スレッドを起こして
その中でやっていたためにうまく行かなかったようです。

ソケットは、プロセスセーフではない、だけでなく、
スレッドセーフではない、ということでしょうか?
0938デフォルトの名無しさんNGNG
>>931
隠しAPIごときで差が出ることほとんど考えられないな。
0939903NGNG
>>933
言葉足らずでスマソン。
でも後者のスタイルが一般的なのならそっちにしようかと思います。

後学のために使わないボタンを使用不可にする方法も
一応知っておきたいのですが、やっぱ GetDlgItem() なんでしょうか。
0940デフォルトの名無しさんNGNG
>>937
スレッドセーフの意味がわかっているのかと小一時間・・・(略
0941デフォルトの名無しさんNGNG
>>919
とりあえずGetLastError()でも見てみたら
0942デフォルトの名無しさんNGNG
>>939
PropSheet_SetWizButtons()とか。あと MFCの CPropertySheet あたりを参考に汁!
キャンセルボタンは、ずーと表示で、「次へ」を「完了」ボタンに変えるのが標準っぽいよ。
0943903NGNG
>>942
PropSheet_SetWizButtons() ではキャンセルは非表示または無効にできないですよね。
やはり>>927で言う後者が標準なんでしょうね。
0944デフォルトの名無しさんNGNG
>>943
そんなに非表示にしたいなら、実際にやってみりゃいいのに。
 ::ShowWindow( ::GetDlgItem( hWizDlg , IDCANCEL ) , SW_HIDE );
でできたよ。
0945デフォルトの名無しさんNGNG
ファイルハンドルから、ファイル名って逆引きできませんか?
0946デフォルトの名無しさんNGNG
NT4.0でGetFileAttributes("NUL")を呼ぶと、FILE_ATTRIBUTE_DEVICE
ビットが立っていないのですが、これはXP/2000でも同様でしょうか?
NT4.0以降でファイルをオープンせずに、デバイスかどうかの判別をするには
どうしたらいいのでしょうか?
0947デフォルトの名無しさんNGNG
>>945
CreateFileMapping -> MapViewOfFile -> GetMappedFileName
の3段攻撃で。
0948945NGNG
>>947
THX。E:\test.txt を試したら、"\Device\HarddiskVolume4\test.txt" と
返ってきて面食らいましたが。
//うーん、でも、GetMappedFileName が 9xでは使えないのか...
0949919NGNG
>>941
アドバイスありがとう。
仰る通りにエラー番号を取得してみますね。
では。
0950デフォルトの名無しさんNGNG
age
0951デフォルトの名無しさんNGNG
SDKでフレームを実現するにはどうすれば良いのでしょう?
因みにフレームとはウインドウを仕切るフレームのバーの事を指しています。
0952デフォルトの名無しさんNGNG
初めて書き込ませてもらうんですが
APIでアルファブレンディングを実装するにはどうしたらいいのでしょうか?
ピクセル単位でブレンドしたい画像それぞれのRGBを取得して
計算を行えばいいのでしょうか?
計算の方程式は簡単に思いつくのですが、それでは恐ろしく遅いと思うので
一応ゲームに使う予定なので、もっと早い方法はないのか……と
思っているところです。
0953デフォルトの名無しさんNGNG
>>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
);
0954デフォルトの名無しさんNGNG
質問です。
構造体のリファレンスが載ってる本もしくはHPってしりませんか?
0955デフォルトの名無しさんNGNG
>>954
お前は
今朝までに作った構造体の数をおぼえているのか?
0956デフォルトの名無しさんNGNG
>>954
英語版のMSDNへ逝けよ。
0957あNGNG
>955
お前は今まで食べたパ(以下略
0958デフォルトの名無しさんNGNG
(以下略 =>ンツの数を覚えているのか?
0959デフォルトの名無しさんNGNG
ある大きさ(単位pt)のフォントの高さの上限というものは決まっているのでしょうか?
例えばどんなフォントでも12ptならば高さ0〜X以内におさまる、と言えるのでしょうか?
言えるのならばXの値を取得する方法を教えてください。
0960デフォルトの名無しさんNGNG
>>959
フォントサイズが12ptなら高さ上限は12ptだと思うが?
0961デフォルトの名無しさんNGNG
何の単位で取得したいんだか。

>>950 次スレは?
0962デフォルトの名無しさんNGNG
>>953
スプリッタと言うんですか。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_117.htm
こういうやつです。

しかしこのやりかたでは、3つ以上に分割できない。

どうやって実装するのかイメージが掴めません。
もうすこしヒントを頂けないでしょうか?
0963デフォルトの名無しさんNGNG
指定された文字が全角か半角かを判別するAPIありませんか?
0964デフォルトの名無しさんNGNG
>>962
楽をしたいのならスプリッタ専門のウインドウを作るといいよ
勿論、その分リソース消費することになるけど。
それがイヤなら実装でがんばるしかない。
0965デフォルトの名無しさんNGNG
そもそもプロポーショナルフォントに全角も半角もないが。
0966デフォルトの名無しさんNGNG
>>963
文字ってなんだよボケナス。
SJISの上位バイト判定ならIsDBCSLeadByteでも使っとけ。
0967デフォルトの名無しさんNGNG
>>965
ネタで言ってんのかマジで言ってんのかわからん。
0968964NGNG
>>962
役に立たないかも知れないけど、
うぷろだ用意してきたら昔つくったソース上げるよ
0969966NGNG
>>964
いい人がいるもんだな。
超低レベルな煽りしか書けないアホ共に
爪の垢を煎じて飲ませてやってくれ。
0970デフォルトの名無しさんNGNG
>>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化するとそうも行かず困ってます。
0971デフォルトの名無しさんNGNG
>>936
例の和解で公開されたものから1つ例を挙げるとShowJavaConsoleか。
これのおかげで速くなってるとはまったくもって思えないけど
0972959NGNG
取得したいのは論理単位でです。
おなじ12ptでもフォントによってTEXTMETRICのtm.tmHeightは異なるので
上限があるのかなと思ったのですが…
0973デフォルトの名無しさんNGNG
>>970
ふつーGetTextExtentPoint32()で一々数えると思うが。
0974デフォルトの名無しさんNGNG
新スレ立てます。
0975デフォルトの名無しさんNGNG
立てますた。
http://pc3.2ch.net/test/read.cgi/tech/1032548635/
0976デフォルトの名無しさんNGNG
>>970
Unicodeか・・・ちなみにギリシア文字(アルファとかベータとか)は全角だと思いますか?半角だと思いますか?
0977デフォルトの名無しさんNGNG
>>976
んなVB厨みたいなこと言うなよ。
全角に決まってるじゃん
固定ピッチフォントで確かめれば一発でわかるじゃん。
ちったー自分で試してみろよ
0978デフォルトの名無しさんNGNG
>>977
ぎゃはは! マヌケなDel厨発見。

コードページって知ってるか?
それ以前にUnicodeって知ってるか?

けっこう笑えたんで晒しとくね。
0979デフォルトの名無しさんNGNG
>977
固定ピッチのCourier Newで試してみたところ、半角ですた。
0980デフォルトの名無しさんNGNG
>>977
実は自分がVB厨?

( ´,_ゝ`) プッ
0981デフォルトの名無しさんNGNG
仲良くな。
0982デフォルトの名無しさんNGNG
> 全角に決まってるじゃん
> ちったー自分で試してみろよ

( ´,_ゝ`) プッ
0983デフォルトの名無しさんNGNG
>>977
自分が限られた環境の中で生きていることを忘れているらしい…
0984デフォルトの名無しさんNGNG
977のスキルを考慮して反論を予想してみると、
 V B 厨 必 死 だ な (藁
くらいが関の山だろな。

自業自得なんで同情はできんが。
0985デフォルトの名無しさんNGNG
>>984
「俺がやったときはそうだった」とかな。
0986デフォルトの名無しさんNGNG
CreateThreadについて質問です。
MSDNのヘルプに
> C ランタイムライブラリの関数を使うスレッドは、CreateThread 関数と ExitThread 関数ではなく、
> _beginthread 関数と _endthread 関数を使うようにしてください。
と書いてあったのですが、これは何故ですか?
言われたとおり_beginthread/_endthreadを使いましたが、気になったんで…
0987デフォルトの名無しさんNGNG
FAQだ氏ね
0988デフォルトの名無しさんNGNG
ランタイムの初期化処理や終了処理が必要になるから。
ただし、すべてのランタイム関数で必要なわけではない。
0989デフォルトの名無しさんNGNG
>>986
ライブラリの内部変数排他処理絡みじゃないの?
_beginthreadで、排他処理用mutexの初期化とかやったりとか
考えられる。(合ってるかどうかわからないけど)
0990デフォルトの名無しさんNGNG
なんでライブラリのソースみないの?
0991デフォルトの名無しさんNGNG
例えば asctime のような関数をスレッドセーフに作るなら、スレッドごとに領域を確保しなきゃならんし、解放しなきゃならんでそ。実装の詳細は知らんけどたぶん。
0992986NGNG
>>988-991
レスありがとうございます。
>>991さんのレスで納得しました。
0993デフォルトの名無しさんNGNG
つーか次スレできてるぞ

Win32API 質問箱 Build6
http://pc3.2ch.net/test/read.cgi/tech/1032548635/l50
0994デフォルトの名無しさんNGNG
きょうび 1000getなんて流行りませんな
0995デフォルトの名無しさんNGNG
きょうび 1000getなんて流行りませんな
0996デフォルトの名無しさんNGNG
>>995
やればいいじゃん
0997デフォルトの名無しさんNGNG
きょうび 1000getなんて流行りませんな
0998デフォルトの名無しさんNGNG
やれば?
0999デフォルトの名無しさんNGNG
逝け池
1000デフォルトの名無しさんNGNG
1000ゲト
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。