トップページ⇒tech
981コメント336KB

Win32API 質問箱

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

Win32API以外の質問については >>2 を参照。
0002デフォルトの名無しさんNGNG
 すれ立てるまでもない質問はここで 第2刷
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=990082077
 VC++初心者質問スレ
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=984812029
 C++Builder相談室
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=969458279
 C言語なら、オレに聞け! <2>
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893
 なぜC++はあんなに難しいのか?
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=982758107
 C#相談室
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=977112364
 鬱だ氏のうDirectX
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=966655286
 Java相談室 Part2
  http://piza.2ch.net/test/read.cgi?bbs=tech&key=980858322
0003デフォルトの名無しさんNGNG
コンテキストメニューをWinZipみたいにオーナードローするにはどうやったらいいすか?
0004デフォルトの名無しさんNGNG
よくわかんねーけど、
http://piza.2ch.net/test/read.cgi?bbs=tech&key=973187725
こっちじゃできないの?
0005デフォルトの名無しさんNGNG
1は最近来たのか?>>4が正しいよな

しかしギコ猫の相談スレが、スレ立てるまでも…に駆逐された
例もあるし、はてさてどうなるかな。ま、頑張ってくれ
0006デフォルトの名無しさんNGNG
あっちは雰囲気がいやだからあえてこっちに書き込む(w

>>3
普通にHMENUでオーナードローできない?
0007デフォルトの名無しさんNGNG
クリップボードの変更ってどうやったらわかるの?
常駐秀丸とか。

まさか、タイマー使って監視してるんじゃないよね…。
0008デフォルトの名無しさんNGNG
>>7
SetClipboardViewer

>>4-5
あっちの576が書いてるように、こっちはWin「32」APIってことにしておけ(w
0009デフォルトの名無しさんNGNG
IE コンポーネントってどうやって使うんですか?
0010デフォルトの名無しさんNGNG
>>9
http://fukuoka.cool.ne.jp/manabu/tech/2_webbrowser1.htm
0011デフォルトの名無しさんNGNG
エクセルのようなソフトはどうやって作ればいいのですか?
マジレスを希望します
0012デフォルトの名無しさんNGNG
>>3
http://www.codeguru.com/shell/CascadingMenus.html
00133NGNG
>>12
先9です
0014デフォルトの名無しさんNGNG
>8
あれはどう見てもネタ
0015デフォルトの名無しさんNGNG
>>10
Win32API をきぼー
0016デフォルトの名無しさんNGNG
>>15
あれを参考にすればできると思うのだが…。
0017デフォルトの名無しさんNGNG
>>15
IWebBrowser2を使えばできる。
001817NGNG
VC持ってるなら、CWebBrowser2のソース見れば?汚いけど。
0019デフォルトの名無しさんNGNG
SendMessage関数のメッセージ(EM_UNDOとかあるけど・・)は、
どうやって仕様を知ることが出来るのですか?
誰か教えてください。お願いします。
0020デフォルトの名無しさんNGNG
とりあえず、http://msdn.microsoft.com 逝っとけ。
0021デフォルトの名無しさんNGNG
>>18
Windows95APIバイブルの2巻にいっぱい載ってる
002221NGNG
>>18じゃなくて>>19だ。
0023デフォルトの名無しさんNGNG
エクセルのようなソフトはどうやって作るんですか?
教えてください。
0024デフォルトの名無しさんNGNG
とりあえず向こうを使い切らないか?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=973187725
0025デフォルトの名無しさんNGNG
他のプロセスのデフォルトヒープ領域の開始位置とサイズ、
拡張ヒープ領域の開始位置とサイズをすべて取得するのはどうやるの
自分の取得方法なら分厚いAPIマニアルに書いてあるけど相手のを
取る方法はどこにもない
0026デフォルトの名無しさんNGNG
>>25
ハッカー級でないと難しいかも。

そのプロセスに潜り込んで、中から調べればいいだけ。
漏れならそうする。

マジで外から調べようとするなら、
たぶん、Native API を使わなきゃダメ。
002725NGNG
DBxSTANDみたいなツールを作りたいんですけど・・・だめですかー
0028デフォルトの名無しさんNGNG
>>25
グローバルフックを仕込んで、DllMain の PROCCESS_ATTACH の
時に調べると良いのでは?
002926NGNG
>>28
他に Debug API を使うという手もある。
Guest 権限ではダメだが。
0030デフォルトの名無しさんNGNG
OwnerDraw の ComboBox では CB_SETCURSEL は機能しないのでしょうか?
リストの項目が必ず先頭から表示されてしまいます。
直前に選択した項目をリストメニュー中で反転表示したいだけなのですが…
0031デフォルトの名無しさんNGNG
とりあえず向こうを使い切らないか?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=973187725
0032デフォルトの名無しさんNGNG
>>30
オーナードローの描画範囲矩形が渡されてない。。とか?
それだけではよくわかりません。
0033デフォルトの名無しさんNGNG
SetWindowsHookEx をラップするクラスを作ろうとして鬱になった。
コールバックにthisを渡す方法がない。無理だわ...
0034デフォルトの名無しさんNGNG
フックプロシージャは他プロセスから呼ばれることすらあるから根本的に
不可能と思われ
0035デフォルトの名無しさんNGNG
それって関係あるんだろうか?
コールバックで自分の処理が終わった後 postProc に委譲するでしょ?
これをどっから持ってくるかが問題なんだよなあ
グローバルな関数を動的に生成できないってのが癪だよ。
結局スタティック関数を抱えたクラス(のインスタンス)を動的に生成
することでしのいだが...
0036デフォルトの名無しさんNGNG
ファイルの移動を目的として、
MoveFile(SrcFile, DestFile);
を使ったのですが、この関数が必ず失敗してしまいます。

同じ動作をさせようと思い、
CopyFile(SrcFile, DestFile, FALSE);
DeleteFile(SrcFile);
としてみたところ、CopyFile()は成功しますが、DeleteFile()が失敗します。

これはどうしてなんでしょう。
どうか解決策を教えてください。
0037デフォルトの名無しさんNGNG
>36
削除したいファイルを別のアプリで開いたりしてない?
関数が失敗したあとにGetLastError()の返値を調べてみては。
003836NGNG
>37
GetLastError()で調べてみたところ、
「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」
ということでした。

でも、削除したいファイルを別のアプリで開くというようなことはしていません。
(削除したいファイルはドラッグ&ドロップで得る形になっていますが関係あるのでしょうか)
0039デフォルトの名無しさんNGNG
>>38
誰も使ってなければそのメッセージはでない。
ドラッグ含めて調べなおせ。
004036NGNG
ドラッグ&ドロップでなければ、目的のファイルに対するDeleteFile()ができるようです。
ドラッグって、他のプロセスがファイルを使ってることになるんですかね。
004136NGNG
誰か、教えてください〜〜〜〜〜〜〜〜〜
0042デフォルトの名無しさんNGNG
うぜえよ。
ちゃんとDragFinish()やってるか?
どうせやってないとかそんなことだろ?
0043デフォルトの名無しさんNGNG
他の窓下にある、キャプションの無い特定のアイテムのハンドルを得るには
どうしたら宜しいのでしょうか。
0044デフォルトの名無しさんNGNG
Win98上で試してみた。DragFinishやる前でも削除できる。
つか、普通に作ってれば削除できる。自分でハンドル開いてたり
とか、きっとそういうレベルだな。クソの予感
0045デフォルトの名無しさんNGNG
>>36
デバッグ中なんかで途中終了したときに、ファイルをつかみっ放しに
したりしてることもある。
ドラッグ自体は確かにデスクトップだかなんかのプロセス管理下だが
放せば終わり。そんだけ
0046デフォルトの名無しさんNGNG
>>43
Spy を使う
004736NGNG
DragFinishを使う場所の確認はいろいろやってみましたが、状況は特にかわりません。

>自分でハンドル開いてたりとか
んなことしてないよ。それくらいのことなら自分で気づくさー
0048デフォルトの名無しさんNGNG
>>43
FindWindow(親探し) -> EnumChildWindows(子列挙)
-> GetWindowLong/GetClassLong(ターゲット判定)
ではだめかい。
0049デフォルトの名無しさんNGNG
>>36
NTor2000で削除権が無い
005043NGNG
>>48 有り難う御座います〜
早速。。と言いたい所ですが、今ちょっと試せない(残リソースが無いw)ので、
後で試してみます。
005136NGNG
>49
たしかにWin2kなんですが、アドミニストレータでログインしてるんで削除権はあるんじゃないんかなぁ。
ほんとにいろいろ考えてもらってありがたいのですが、全然解決できない・・・

WM_DROPFILESを捕まえてDragQueryFile()でファイル名を得る。
そのファイル名に対しDeleteFile()、そしてDragFinish()。

と単純なことなんですが、ダメダメです。
0052デフォルトの名無しさんNGNG
>>36
リソース掴みは調べたの会。アイコンが表示されていると
掴まれて足りする。本気でやるなら、使用中プロセス置換か
稼動プロセス停止(ほとんどすべて止める)を考えないといけない。

使用中プロセス置換を考えるなら、各ドライブ毎に
テンポラリフォルダを用意し、そこに*ドライブをまたがないように*
削除したいファイルをMoveする。また、移動前には移動先チェックを
常にし、移動先のファイル名が既にある場合には他のファイル名に
移動先名を変えること。削除タイミングはマシン起動時か、次回AP
起動時の最初の方で削除を試みる。リブートをはさまないと失敗する
確率は高いからできればリブート後に削除すること。
ポイントは使用中でもドライブをまたがない移動、もしくは、リネーム
はできる、削除タイミングに注意かな。
もちろんこれでもwin386.swpとか署名付きドライバ(2000以降)など
できないものも当然あるが、普通のものなら大抵使用中でもできる。
0053デフォルトの名無しさんNGNG
>>51
>そのファイル名に対しDeleteFile()、そしてDragFinish()。
ガイシュツだけど、これは順序が逆では?
0054デフォルトの名無しさんNGNG
>>51
Administrator でログオンしてるんなら、
誰が捕まえてるか、さっさと調べりゃいいじゃん。

こういうの、使うとかsa。
http://www.sysinternals.com/ntw2k/freeware/handle.shtml



どうせ結果は…。
005536NGNG
たびたび申し訳ないです。

>53
順序入れ替えてもダメでした。

>54
試してみたら、自分自身がファイルのハンドル握っているようでした。
なんでhDropを解放したあとでもファイル操作がダメなんだろ・・・

ああ、俺ってバカだなー
0056デフォルトの名無しさんNGNG
ていうかファイル操作をシェルにやらせればいいんじゃないの?
SHFileOperationでさ。
005750NGNG
>>48
まだ実装し終わってませんが、とりあえず逝けそうです。
有り難うございました。
0058デフォルトの名無しさんNGNG
WM_DROPFILES 内のコーディングを全部ココに出すしかない
005957NGNG
ハンドルはしっかり得られたのですが、また詰まりました;

ListViewのハンドルを得られたので、ListView_GetItemText
で、得られたリストから項目を吸い出そうとした所、対象のソフトから
「モジュールCOMCTL32.DLLのアドレス〜に対する書き込み違反〜」
等とシステムエラーを吐かれてしまいました。。一体何が。。。
0060デフォルトの名無しさんNGNG
>>59
・該当行アイテムが存在ない
・該当列サブアイテムが存在ない
・バッファが十分でない
ハンドルが正しいかどうかは ShowWindow(hXxx, SW_HIDE); とか試してみる
006159NGNG
>>60
HIDEしてみたら、しっかり隠れたのでハンドルは確かな様です。。。
バッファはとりあえず足りなくてもTextMaxで切り捨てで。
アイテムはおもむろに 16行の4列とか指定してみたんですが、
これが不味んですかね。。;
リストは12項目で1000個程あるのでとりあえず適当で良いかなと
思ったのですが。
006259NGNG
DeleteItemは通る様です。。が、同じ番号にGetItemTextを送ると
やはりエラーが。。。解らんTT
0063デフォルトの名無しさんNGNG
エディットボックスで右クリックをしたときに
メニューを表示しないようにしたいのですが、どうすればいいのでしょうか?
出来れば、サブクラス化しないでやりたいのですが・・・
0064デフォルトの名無しさんNGNG
>>55
"新規プロジェクト"で単純なWin32 Applicationで以下のところだけ追加して
ビルドしてそれでもだめなら諦めろ。とりあえず俺のとこでは期待とおりに動いた。
つか、自分で切り分けもできないのはだめだめだぞ。

-- InitInstanceに追加
DragAcceptFiles(hWnd, TRUE);

-- WindProcに追加
case WM_DROPFILES:
  int   i, iExitLoop;
  HDROP  hDrop;
  UINT  uFileNo;
  char  szFileName[MAX_PATH];
  char  szMsg[1024];

  iExitLoop = FALSE;
  hDrop = (HDROP)wParam;
  uFileNo = DragQueryFile((HDROP)wParam, 0xFFFFFFFF, NULL, 0);
  for(i = 0; i < (int)uFileNo; i++) {
    DragQueryFile(hDrop, i, szFileName, sizeof(szFileName));
    switch( MessageBox(hWnd, szFileName, "Delete", MB_YESNOCANCEL) ) {
      case IDYES:
        if( CopyFile(szFileName, "c:\\file.obj", FALSE) == FALSE ) {
          MessageBox(hWnd, szFileName, "Copy failed", MB_OK);
          break;
        }

        if( DeleteFile(szFileName) == FALSE ) {
          wsprintf(szMsg,
             "File: %s GetLastError: %ld",
             szFileName, GetLastError());
          MessageBox(hWnd, szMsg, "Delete failed", MB_OK);
        }
        else {
          MessageBox(hWnd, szFileName, "Delete Success", MB_OK);
        }
        break;
     case IDNO:
        break;
     default:
        iExitLoop = TRUE;
   }

   if( iExitLoop == TRUE ) break;
  }

  DragFinish(hDrop);
  break;
0065デフォルトの名無しさんNGNG
>>64
もとい。「標準的な"Hello,world"アプリケーション」でした。
0066デフォルトの名無しさんNGNG
>>59
他のAPのリソースになんでもアクセスできると思うなよ。
http://hp.vector.co.jp/authors/VA003525/tips8.htm

つーか、なんで漏れはこんなとこで油売ってんだろ。自分の勉強しよ。
0067↑そうそう、えらそーに言うほどのことでもない学生は勉強しなNGNG
>>62
別プロセスの場合はこうやんだってさ
http://nt.sakura.ne.jp/~miwaki/progtips/process/sharedmemory.shtml
006859NGNG
>>66
有り難うございますーー まさにコレですね。  しかし。。でるふぁい;

調度今、逆ギレて他のソフトの小判ざめ辞めて諸々1から作ってやろうと
思い立った所だったのですが、幸いWin98なのでやはり小判ざめで
逝く事にします^;;
#長い事書けませんでした;
006959NGNG
CreateFileMappingと言うAPI初めて使うんですが、何やっても
第一引き数がキャスト出来んと叱られてしまいます;
(HANDLE)0xffffffff>'void *' から 'int'
0xffffffff>const unsigned int' から 'void *'
一体何なんだ。。(;´Д`)
007059NGNG
すみません解決しました。 逝ってきます。
0071デフォルトの名無しさんNGNG
>>63
サブクラス化なしでは無理しょ
0072ちゃんと読もうな。>>67NGNG
君がえらそーに紹介したのと同じ技法だよ。
それと君は勉強をやめてしまったのか。ま、いいけどな。
007363NGNG
ガーン、そうなんですかー、
なんか、うまいやり方はないかなぁと四苦八苦してみたんですが
結局サブクラスなんですねー・・・・
どうもありがとうございました。
0074デフォルトの名無しさんNGNG
MP3を再生させる事の出来るAPIってあるんでしょうか?
0075デフォルトの名無しさんNGNG
>>74
コーデックがインストールされてればmciで再生可能。
0076デフォルトの名無しさんNGNG
>>72
誰も訂正なんかしていない。VC版でNT付き
ちゃんと読め、というヤツはたいがい自分が読んでない。
>他のAPのリソースになんでもアクセスできると思うなよ。
この逆説的な言い方が幼いというだけ。なんか自分で自分に言い聞かせてる
みたいだ。アンタ自信が初発見だったんじゃないの?
俺もよく答えているが、自信ないヤツほど高圧的なんだよね。
なぜエバる? ま、エバって答えりゃ有難みが増すからかな。
第三者から見ると鬱陶しいので事実を素直に答えといて下さい。じゃ
007776NGNG
>72
どーでもいーね
わりわり、怒るな
0078デフォルトの名無しさんNGNG
ウィンドウの縁からクライアント領域までのオフセットを取得するには
どうすればいいのでしょうか。
どなたかご存知の方、教えて下さい。宜しくお願い致します。
0079知ってる範囲ではNGNG
ClientToScreenとGetWindowPosを組み合わせるとか、
GetSystemMetricsでウィンドウ枠の幅を得るとか,,,,,,
008072NGNG
そうか。今度から気をつけるよ。
あと、素直に答えなかったのは検索すればすぐ
見付かったからだ。すぐに人に聞くのではなく
もう少し調べて欲しかった。そんだけ。
008178NGNG
>>79
こんな API があったんですね。不勉強でお恥ずかしい限りです。
早速やってみます。ありがとうございました。
008236NGNG
よーく探したら、やはり閉じ忘れのファイルハンドルがありました。
考えてくれた方々、どーもありがとー。

てうか、ごめん。
0083デフォルトの名無しさんNGNG
GetClientRect+ClientToScreen
AdjustClientRectEx
WM_NCCALSIZE
なども調べてみよう
0084デフォルトの名無しさんNGNG
あがれや
0085デフォルトの名無しさんNGNG
exeやdllが使用中かどうかを他プロセスから調べるにはどうしたらいいのですか?
0086デフォルトの名無しさんNGNG
>>85
そのファイルの名前を変更しようとして失敗すれば使用中。
成功したら元に戻すのを忘れずに。
0087デフォルトの名無しさんNGNG
>86
あたまいーねー
0088デフォルトの名無しさんNGNG
あんまり頭良くないと思う
exeやdllがCD-ROM上にあったり読み取り専用で共有されてたり
アクセス権の関係で読取専用だったりしたらどうするつもりなんだろう
0089デフォルトの名無しさんNGNG
>>88
なんのために使用中かどうか調べるのか、その目的によっては
Read Onlyも「使用中」とみなしてよいのではないか?
0090デフォルトの名無しさんNGNG
ダイアログをリソース使わないで、動的に作りたいと思います。
でもCreateDialogIndirectの構造体の作り方がよく分かりませんでした。
テンプレートの詳しい解説サイト無いですか?
0091デフォルトの名無しさんNGNG
>>89
質問の条件だけじゃ漠然としすぎてるね。
実際に使ってみてエラーが出るかどうか調べるのが一番確実なような。
0092デフォルトの名無しさんNGNG
>90

DialogBoxIndirect()のサンプルがあるから参考にしてくれ。
http://www.hinaiji.com/quixel/002/

あとはMicrosoft(米国)で下の言葉を検索すればいろいろ見つかるぞ。
http://search.microsoft.com/us/default.asp

CreateDialogIndirect
DialogBoxIndirect
DLGTEMPLATE
DLGITEMTEMPLATE
009390NGNG
>92
なんかえらく難しそうですね・・・。
リソース→メモリイメージ変換ツールというのが見つかったので、
それも参考にしてやってみます。ありがとうございました。
0094デフォルトの名無しさんNGNG
すみません、超初心者な質問ですが気になったので教えてください。
CもC++もWinプログラムも始めたばかりなのですが、
グローバル変数ってありますよね、
どこかのスレで「グローバル変数作りまくるのはダメ」
とか書いてあったので考えてしまったのですが、
例えばある構造体型の変数(オブジェクト?)をグローバルで
宣言してたとして、それをローカルに変え、かつ常に
内容を保存したままにするのは、Windowsプログラムでは
可能なんでしょうか?
DOSのコードならばMain関数内で宣言して使えばいいわけ
でしょうけれど、WindowsだとWinMainだけでなく
ウインドウプロシージャ(ウインドウ関数)がありますよね?
ここに制御が行ったとき、変数は失われたりしないのでしょうか?
バカな質問ですみませんが、よかったら教えてください
0095デフォルトの名無しさんNGNG
>94
ちょっと質問の意味が正確にわからないんだが、main()だろうがWinMain()だろうが、プログラムのルールはC/C++と同じ。
だから、ローカル、グローバルの違いもC/C++言語の本に書いてあるとおり。

WinMain()とプロシージャーで同じ変数を使いたいときは、グローバル変数にすれば、両方で使える。
グローバル変数を使いたくなければ、補足ウィンドウデータ(WNDCLASSEX構造体のcbClsExtraやcbWndExtra)を使ってWinMain()からプロシージャーに値を渡す。

プロシージャー内で同じ変数を使い続けるにはグローバル変数かstatic変数を使う。

というか、C/C++を勉強するなら、DOSプログラムから始めた方がいいと思うが。
いきなりAPIは難しい。
009694NGNG
なるほど、ありがとうございます。
やはりグローバル変数を使うのが基本なのですね。
要は使い分けでしょうか。

>いきなりAPIは難しい
よく言われるんですが、Winで作りたいものがあるので
根性でやってます(汗笑
C/C++の基本的なことにも毎回辞書を引いたりしてるので
遅々として進みませんが・・・。
0097デフォルトの名無しさんNGNG
Globalの使用を肯定すんなよ>>95
アホスレの1ならしょうがないけど。
ローカル関数内でのstatic変数も使うな。>>96
WindowsのコールバックにはGet/SetWindowLong使え。
0098デフォルトの名無しさんNGNG
>>97
>WindowsのコールバックにはGet/SetWindowLong使え。

WM_CREATE のハンドラでは CreateWindow から戻る前に呼ばれるわけ
だけど、そこでは GetWindowLong できないよね。シンプルな解決法ある?
0099デフォルトの名無しさんNGNG
ヘルプのCreateWindowの最後に渡す引数を参照>>98
WM_CREATEで受け取ったら、それをSetWindowLongしとく。
0100デフォルトの名無しさんNGNG
100!
0101デフォルトの名無しさんNGNG
>>97
他スレで議論があったらしいけど、
杓子定規に「○×は使うな、△□を使え!」って論法は危険だと思うぞ。

特に学習の途上なら、
その人のスキルに応じた段階を踏んでいくべきじゃないだろうか。

>>94 はまず、メッセージ駆動によるプログラミングを収得することが目的なわけだから、
初めの一歩としては、それ以外の要素はすべて捨ててもいいと思う。

自分で作ったウィンドウクラスから複数のインスタンスを作るとき、
「なるほど、グローバル変数じゃ、無理だな」と気がつくはず。
そのとき、次の段階へ進めばいいだけ。
0102デフォルトの名無しさんNGNG
>>97
グローバル使うなって、MSDNのサンプルでも思いっきり使ってると
思うけど?
自分の考えが正しいと信じるのは勝手だけど、人に押し付けようと
すんなよ。
0103デフォルトの名無しさんNGNG
DLLをあるアプリケーションの起動と同時にそのアプリに
読み込ませたいんですけど、どうやったらできますか?

ちなみにMEです。NTならやり方わかるんですけど…。
0104デフォルトの名無しさんNGNG
アプリの起動と終了を監視するプログラム組みたいんですけど
これってAPIで出来ますか?
ちなみに使っている言語はCです。
0105104NGNG
OSはNT4.0WSです。
0106デフォルトの名無しさんNGNG
Win98&VisualC++6使ってますが、ウィンドウの内側の
サイズってどうやって指定しますか?
外枠を含めた全体のサイズしか指定できなくて、
今はタイトルバー分だけひしゃげてます。

VBだとありますよね…
0107デフォルトの名無しさんNGNG
タイトルバーやウィンドウ枠の分も含めてサイズ指定すればよい。
それぞれのサイズはGetSystemMetricsで取得できる。
0108デフォルトの名無しさんNGNG
>>103
インポートライブラリをリンクするだけ。
0109デフォルトの名無しさんNGNG
>>104
フックを使えばできると思われ
0110デフォルトの名無しさんNGNG
WindowBlindsのSKIN
を使用してウインドウに貼り付けたいのですが
タイトルバーやスクロールバーのところはどうやったら
変えることができるのでしょうか?
0111デフォルトの名無しさんNGNG
>>108
あるアプリってかいてあるから、自作アプリじゃなくて既存のアプリじゃない?
それなら、フックとかを使うべし。
0112デフォルトの名無しさんNGNG
>>104
フックを使うなら
SetWindowsHookEx()
GetModuleFileName()
あたりで検索してみろ。
0113デフォルトの名無しさんNGNG
WindowBlindsを起動
0114クロネコNGNG
>>106

SetRectで希望のサイズを設定して
AdjustWindowRectExがお手軽。
0115デフォルトの名無しさんNGNG
>>112
了解でございます。
0116デフォルトの名無しさんNGNG
>>114
メニューが2段とか3段のときはどうするん?
0117デフォルトの名無しさんNGNG
>>116
WM_NCCALCSIZEを投げる
0118デフォルトの名無しさんNGNG
ちょっとスレの主旨から外れるんですが、
マルチスレッドって、スレッド関数が終了してもプロセス終了または
手動でCloseHandleを呼び出さないとハンドルが解放されませんよね。
これってもしかしてWindowsのマルチスレッドの弱点?
同じスレッドを繰り返し作ったり終了したりしてたら
ハンドルの分微妙にメモリ消費が増えていく・・・?
0119デフォルトの名無しさんNGNG
ナニイッテンノ?>118
0120デフォルトの名無しさんNGNG
マルチスレッドプログラミングって本、
買うなり、借りるなりしなさい。>118
0121デフォルトの名無しさんNGNG
流出ログ一覧直リン!
http://members.nbci.com/zmkanamoe/success/PC-Success.cab 3.08MB 約170ファイル
http://members.nbci.com/zmkanamoe/success/eleven-jp.zip 110KB イレブン
http://members.nbci.com/zmkanamoe/success/coconuts.zip 24KB ココナツ
http://members.nbci.com/zmkanamoe/success/SONY.zip 1.55MB ソニー

イレブンはアダルトグッズ購入者
0122118NGNG
すみませんアホなんでよくわからないんですが、
1つだけ教えてください。
ExitThread()で終了してからもう一度同じ関数のスレッドを開始したら
同じハンドルは返りませんよね?
「同じスレッド関数は何回も呼び出さないのがセオリー」
ってことですか?
0123デフォルトの名無しさんNGNG
>>122
むしろ、同じハンドルが返る(=一つの関数から一個しかスレッド作れない)
としたら非常に困ると思うのだが。
0124デフォルトの名無しさんNGNG
>>122
スレッドハンドルにしてもスレッド ID にしても、
同時に複数開いている(または存在している)ときは、
それらは必ず異なる値になる。

しかしこれらは同じ番号(ハンドルや ID)が再利用されることがあるので、
運が悪ければ、直前に閉じたばかりのスレッドと同じ ID やハンドルが、
再び割り付けられる場合がある。


だから、たとえば ID なら
「ある時刻に同時に存在しているスレッドを識別する番号」
という程度、ハンドルなら
「ある時刻に同時に開いているスレッドを識別する番号」
という程度に考えた方が良い。

ちなみに「ハンドル」と「ID」の違いに気をつけること。
0125106NGNG
>>107 >>114
ありがとー。AdjustWindowRectEx使うよ。
0126デフォルトの名無しさんNGNG
>118
スレッドのハンドルは2つ作成されるよ。生成したスレッドに渡るやつと、
beginthreadexを呼んだ方と。その2つをCloseHandleすれば本当に削除される。
beginthreadの方は呼出し側のハンドルは勝手にクローズされる。
詳しくは、やっぱり本参照ってことで。
0127デフォルトの名無しさんNGNG
初歩的な質問で申し訳ないのですが、WindowsでDirectDrawを使わないで
ダブルバッファリングを実現するにはどのようにしたら良いのでしょうか?

HDC hBitmapDC;
HDC hMemDC;
HDC hDC;

hDC = GetDC(hWnd);
hMemDC = CreateCompatibleDC(hDC);
hBitmapDC = CreateCompatibleDC(hDC);
SelectObject(hBitmapDC,g_Bitmap);

BitBlt(hMemDC,0,0,100,100,hBitmapDC,0,0,SRCCOPY);
BitBlt(hDC,0,0,100,100,hMemDC,0,0,SRCCOPY);

DeleteDC(hBitmapDC);
DeleteDC(hMemDC);
ReleaseDC(hWnd,hDC);

こんな風に書いて出来ると思ったんですが何も表示されませんでした。
0128デフォルトの名無しさんNGNG
MSDNサンプル参照>127
0129デフォルトの名無しさんNGNG
>>128
ううー、どこにあるのでしょうか・・・
ヒントだけでも教えてもらえませんか
ダブルバッファで検索したらDirect3DとDAOくらいしかヒットしませんでした。
0130デフォルトの名無しさんNGNG
>>129

無理せず基本からやりなおせって。
0131デフォルトの名無しさんNGNG
サスペンド・スタンバイになろうとしているのを検知する方法ってある?
0132デフォルトの名無しさんNGNG
>>131
WM_POWERBROADCAST
0133デフォルトの名無しさんNGNG
WM_POWERBROADCAST
0134デフォルトの名無しさんNGNG
>>127
hMemDC に適当な bitmap を SelectObject させとかなくちゃだめ。
メモリDC は初期状態だと 1x1 ピクセル、depth=1 の
ビットマップしか持っていないから。

hBitmap = CreateCompatibleBitmap(hDC, size_x, size_y);
SelectObject(hMemDC, hBitmap);

とかやってみな。
0135デフォルトの名無しさんNGNG
SetPixelで画面を描画していくのと、DIBのビットマップを
作って、そっちのデータに直接書き込むのとどっちの方が
能率いいと思いますか。
0136デフォルトの名無しさんNGNG
>>135
そりゃ描画内容にもよるだろ。
0137135NGNG
>>136
フラクタルの画像をかこーと思ったんですが、
一点づつ打っていくのでDIBのほうがいいでしょうか>
0138127NGNG
>>134
できました!!
どうもありがとうございました。
0139デフォルトの名無しさんNGNG
>>137
SetPixelは遅いと思われ
0140デフォルトの名無しさんNGNG
DIBに変換して直接メモリ操作が良いと思う。>137
これって他にDirectX使う以外で良い方法ある?
0141デフォルトの名無しさんNGNG
>>137
前に俺がカオス画像書いたときは、描画スレッドを別に作って、
演算しつつDIBに描画し、WM_TIMERで10msごとにBitBltして表示した。
もちろんDIBに対してクリティカルセクションかけてたけど。
0142デフォルトの名無しさんNGNG
Win2k+VC6.0でCreateHardLink使うとリンクエラーになるけどなんで?
あるいはハードリンクはるコマンドラインツールってない?
0143デフォルトの名無しさんNGNG
>>142
VCのSPは何?
0144デフォルトの名無しさんNGNG
windowsのハードリンクって何?unixのアレ?
いつのまにやらそういう事ができるようになったのか
0145デフォルトの名無しさんNGNG
NTでは大昔からできたよ
0146デフォルトの名無しさんNGNG
シロートながらふとやってみたくなったのですが、
WinMainとウインドウプロシージャを自作クラス内でやるのって
難しいんでしょうか?

クラス定義
→クラス内でWinMainとプロシージャを宣言
→中身を定義
→グローバルでクラスオブジェクト宣言
→WinMain呼ばれる(コンストラクタから呼べるかな?
ってな感じでいけるのかなぁ。
生WinAPI使って全部丸々オブジェクト指向、ってのは
知識浅いと無理でしょうか?
どうかアドバイスお願いします。
0147デフォルトの名無しさんNGNG
>>146
WinMain は OS 側から呼ばれるエントリポイントなので、自分で定義
したクラスから呼び出そうとか考えない方が良い。

実際には直接 OS が WinMain を呼ぶわけではなくて、その前にスター
トアップルーチンが介在しているので、これを自分で書けば不可能では
ないと思うけど、労多くして益なしだからやめいた方が良い。MFC など
のクラスライブラリでも WinMain を介さないフレームワークって見た
ことないし。

ウィンドウプロシージャに関しても呼び出し規約が決まっていて、隠し
パラメータとして this を渡す必要があるメンバ関数は登録できない。
ただし、こっちは抜け道があって

1. SetWindowLong で GWL_USERDATA に this ポインタを格納してお
  き、ウィンドウプロシージャでは GetWindowLong で this を取得
  し、メンバ関数を呼び出す。
2. thunk を使って、this ポインタを埋め込むウィンドウプロシージャ
  を動的に作成する。

なんて方法で解決できる。後者は ATL で使われている。

ところで Win32 API を使ってプログラムを組みたいということなら、
一からフレームワークを作るよりも ATL/WTL を使うことを薦めます
けどね。
0148146NGNG
うが!
APIスレあるのに古いやつageてしまった・・・・
申し訳ないですすみませんごめんなさい
でもsageでいいのでレスください(ぉ
0149146NGNG
あ、レスありがとうございます!
やっぱ難しいのですか・・・う〜ん・・・・・・
ただせっかく書いてもらったし興味は残るんで
コピペしといて勉強してみます。
どうもありがとうございます。
ただATLとかは名前しか知らないんで・・・・
その辺も調べる必要ありってことですね。
ひとまずやってみます、ありがとうございます!
0150デフォルトの名無しさんNGNG
自分のexeのpathを取得する方法は?(GetCurrentDirectoryは×)
0151デフォルトの名無しさんNGNG
>>150
GetModuleFileName
0152デフォルトの名無しさんNGNG
せっかくだからこっちを新しいスレにするか?
もう一つの方は800越えてるしな
0153150NGNG
>>151
Thanks!
0154デフォルトの名無しさんNGNG
マルチモニタ環境でも画面の大きさ(縦幅・横幅)を簡単に取得する方法は?
0155デフォルトの名無しさんNGNG
SERVLETやJSPとかで掲示板を作る場合、件数ごとにページを振り分けたいのですが
やり方教えてください。
0156デフォルトの名無しさんNGNG
>>150
_argv[0]
0157156NGNG
スマン
ここAPIスレだったね
逝ってきます
0158デフォルトの名無しさんNGNG
>>154
DirectX
0159デフォルトの名無しさんNGNG
>>158
DirectX以外で取得する方法は無いの?
0160デフォルトの名無しさんNGNG
>>159
レジストリに訊く
0161デフォルトの名無しさんNGNG
「簡単に」ってのが何を意味してるのかいまいちわからんけど
モニタを列挙する正攻法じゃだめなの?
0162loop01/09/06 16:41ID:ljbSNkmM
質問です。アイコンの変更についてですが、エクスプローラ表示時の
アプリケーションのファイル名の左につく小さなアイコンを変更したいのですが、
どうすればいいのでしょうか。
hIconSmやhIconはちゃんと設定しているのですがエクスプローラ表示時だけ
表示されません。
0163デフォルトの名無しさん01/09/06 16:51ID:8jSOa11w
私も質問。

"HelloWorld!!" と表示するだけのコンソールアプリ(c:\HelloWorld.exe)
があり、これを

CreateProcess( NULL, "c:\HelloWorld.exe > c:\temp\HelloWorld.txt", … )

としてみたのですが、リダイレクトの結果のファイルが
作成されていません。他のコマンドでもためしてみても
同じなのですが、 CreateProcess でこういう使い方は
出来ないのでしょうか?
016416301/09/06 16:55ID:8jSOa11w
書き忘れ。

一応、CreateProcess 自体は 1 が戻ってきているので
成功しているのだとは思うのですが。
016516301/09/06 16:57ID:8jSOa11w
修正

"c:\HelloWorld.exe …" ではなくて、
"c:\\HelloWorld.exe …" としてます。

何度も申し訳ない。
0166デフォルトの名無しさん01/09/06 17:00ID:vbslDp7I
>>163
CreateProcessに渡すコマンドラインはシェルを経由しないのでリダイレクト効かない。
出力リダイレクトは、あらかじめCreateFileかなんかで作ったファイルハンドルを
STARTUPINFO構造体に放り込め。
016716301/09/06 17:03ID:8jSOa11w
>>166
なるほど!!

実に明快な回答に感謝。
0168デフォルトの名無しさん01/09/06 17:14ID:zzHUNAwk
>>163
ライブラリ関数の system() 使えば?
0169デフォルトの名無しさん01/09/06 17:23ID:vbslDp7I
まあsystemとかWinExecExとかShell_Executeはシェル経由だから面倒はない。
どうしてもCreateProcessである必要があるなら話は別だけどね。
0170デフォルトの名無しさんNGNG
WinExecExとかShell_Executeって何?
ありもしないAPIデッチ上げてんじゃねーよ
0171デフォルトの名無しさんNGNG
ReadFileScatter
と
WriteFileGather
のサンプルコード、誰か書いてくれませんかー?
members.tripod.com/~masapico/api_WriteFileGather.html
のコードコピペしたら、コンパイルが通らない・・・
オレのへなちょこ技術じゃ太刀打ちできんエラーだったし。
(VC++6.0)
0172デフォルトの名無しさんNGNG
>162
EXEファイルのアイコンを変更したいってこと?
hIconSmやhIconは直接関係ないよ。
EXEファイルの中でリソース番号の一番小さいアイコンがファイルのアイコンとして表示される。
0173デフォルトの名無しさんNGNG
他人のPCのレジストりぶっ壊したいんだけど、
効率良い方法無い?
0174デフォルトの名無しさんNGNG
ありません。
0175デフォルトの名無しさんNGNG
format c:
0176デフォルトの名無しさんNGNG
バット持ってきて物理破壊
0177デフォルトの名無しさんNGNG
住所を調べて最寄りの米軍基地にスクランブル指令。
B-117からピンポイント爆撃してもらおう!
0178デフォルトの名無しさんNGNG
>>173
PC使わせてもらって手作業で。
0179デフォルトの名無しさんNGNG
B-117ってなんれすか?【ピュア】
0180デフォルトの名無しさんNGNG
117なんて爆撃機はないど〜
戦闘機と混同してないか?
F-117てのならいるけど。

B-2爆撃機
http://www.af.mil/photos/images/bombers_b2_0004.jpg

F-117戦闘機
http://www.af.mil/photos/images/fighters_f117_0010.jpg
0181デフォルトの名無しさんNGNG
FindWindow, FindWindowNext 及び

GetWindowRect, SetWindowRect
(だったっけ?でなければ WM_MOVE メッセージ)

これらの命令は Win2K でも利用できますか。
0182デフォルトの名無しさんNGNG
>>181
FindWindowNext?そんなのあったか?
知らなかった...
0183デフォルトの名無しさんNGNG
>>181
なぜMSDNを読まないのですか?
0184デフォルトの名無しさんNGNG
>>FindWindow, FindWindowNext
GetTopWindow 及び GetNextWindow の間違いでしたスマソ

>>183
その MSDN ヘルプ(?)のファイル名を教えてください。
検索してみます。
0185デフォルトの名無しさんNGNG
>>184
ハァ?
0186デフォルトの名無しさんNGNG
どこで聞けばいいのか解らないので、ここで質問。

関数を量産できないかなぁ?

普通窓のラッパークラスって、ウィンドウクラスにラッパークラスの static なメッセージプロシージャを登録するように作るよね。
でもって、メッセージプロシージャから、C++ のクラスのインスタンスにメッセージを投げるって形になるよね。

で、これって

  メッセージキュー -> ウィンドウクラス -> static_MsgProc -> それぞれの窓クラスの MsgProc

って流れになるけど、もし関数のインスタンスを量産できたなら、

  メッセージキュー -> ウィンドウクラス -> それぞれの窓クラスの MsgProc

って出来るから嬉しいかな?っていうだけなんだけど。

なんか既にありそうだけど、とりあえず挑戦してみるのも良いかと思ってソース書き出したんだけど、

int size = sizeof (srcfunc);
f = malloc (size);
memcopy (f, srcfunc, size);

f (〜〜〜);

って方式でやろうとしたら、size が取れなくって引っかかったのだー。

解る人おしえてください。
0187186NGNG
いま、このすれ 1 番上にあるから必要ないけど注意引いて欲しいので age。
0188デフォルトの名無しさんNGNG
>>184
君はどんな環境で開発してるんだい?
それを言ってくれれば直ぐ解決すると思うが。
0189デフォルトの名無しさんNGNG
>>187
closureについて勉強するといい
0190184NGNG
>>188
Delphi6 で開発中。ちなみにAPIヘルプはついていません。
0191デフォルトの名無しさんNGNG
>>190
Delphiじゃあ仕方が無いね
MSDNはオンラインでも参照できるから、そこへ行くといいよ
0192186NGNG
あ、ゴメン、オイラも環境書いてなかった。

VCです。

>>189
closure って BC じゃなかったっけ?とりあえず、今からgoogle逝ってみる。
0193デフォルトの名無しさんNGNG
>>184
ttp://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_gettopwindow.htm
ほれ
MSDNライブラリのonline版は
ttp://www.microsoft.com/japan/developer/library/default.asp
0194デフォルトの名無しさんNGNG
>>190
Personal 版ダウンロードしたけど英語版のヘルプファイルは入ってたよ
0195184NGNG
>>191,193

どうもありがとう。
勉強してきます。
0196デフォルトの名無しさんNGNG
>>186

http://www.asahi-net.or.jp/~HA3T-NKMR/vcl3-1.htm

こういうこと?
0197デフォルトの名無しさんNGNG
サンクスです。うーん、なんか難しい‥‥。
0198デフォルトの名無しさんNGNG
WNDCLASSEX 構造体の hCursor メンバの設定に LoadImage() を使ってみました。

W.hCursor = (HCURSOR)::LoadImage( NULL, MAKEINTRESOURCE(OCR_NORMAL),
    IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE);
すると,生成したウィンドウ上でのカーソルの形状が設定されない気がします。
例えばウィンドウの枠にカーソルを合わせると,双方向な矢印の
カーソル(ウィインドウをリサイズする時のアレ)が表示されます。
そのままクライアント領域にカーソルを移動させると,カーソルがいつもの
カーソルにならず,双方向な矢印カーソルのままでいます。

MSDN Online には確かに LoadCursor ではなく LoadImage を使えと書いています。使い方,間違ってますか?
0199198NGNG
はあぁっ (;´Д`)
hIcon に LoadImage 使ってると
CreateWindow が失敗するし (;´Д`)(;´Д`)(;´Д`)
0200デフォルトの名無しさんNGNG
http://msdn.microsoft.com/library/en-us/winui/hh/winui/winclass_9z8y.asp

> To assign a cursor shape to a window class, load a predefined
> cursor shape by using the LoadCursor function and then assign
> the returned cursor handle to the hCursor member of the
> WNDCLASSEX structure.

と書いてあるように読めるが気のせいか。
0201デフォルトの名無しさんNGNG
↓のソフトウエア―の最小化ボタンの隣についている
▲
▽ボタンをつけるにはどのようなマクロを指定したらよいのでしょうか?
あるいは下記のソフトの作成者の自前なのでしょうか?
わかる方がおられましたらご教授よろしくお願いします。

http://homepage1.nifty.com/cosmic/software/iconstarsmain3.png
0202デフォルトの名無しさんNGNG
>>201
自前です。
0203デフォルトの名無しさんNGNG
>202
自前だとすれば、タイトルバァにBMPを描画して
独自にメッセージを設定しているということですか?
0204デフォルトの名無しさんNGNG
>>203
WM_NC〜系のメッセージをフック。
0205デフォルトの名無しさんNGNG
WM_LBUTTONDOWNの時に座標が
▲
▽ボタンの範囲内であればウィンドウをタイトルバーのみにするのではないのですか?
それとも202にある「自前」というのがネタで、何らかのマクロを設定すれば
▲
▽ボタンをつけられるのでしょうか?

とは言っても↓のソフト以外であのようなボタンがついているのを見たことが無いので自前しかないのかな。
http://homepage1.nifty.com/cosmic/software/iconstarsmain3.png
0206205NGNG
すんません。マウスフックでしたね。
0207デフォルトの名無しさんNGNG
>>205-206
ネタか?
タイトルバー内のクリック自体はWM_LBUTTONDOWNじゃ拾えない。
だからたとえば左ボタンならWM_NCLBUTTONDOWN、ボタンの表示は
WM_NCPAINTを引っかけろってことなんだけど。
0208デフォルトの名無しさんNGNG
>>192
VC なら ATLWIN.H の CWndProcThunk が求めるものだと思うぞ。最初はダミーの
ウィンドウプロシージャを登録しておいて、後で this を潜り込ませるような thunk を
作って差し替えてる。
0209205NGNG
ありがとうございました。
0210デフォルトの名無しさんNGNG
タイトルバーを右クリックしたときに独自のポップアップメニューを
表示させたいのですが、WM_NCRBUTTONDOWNで処理させようと
しても、無視されているのか普通にシステムメニューが表示されて
しまいます。
どう処理すべきなのでしょうか?
0211デフォルトの名無しさんNGNG
システムメニューを書き換える>210
0212デフォルトの名無しさんNGNG
>>186
http://mentai.2ch.net/prog/kako/957/957341074.html

の79にサンク(小さな関数を作る事でオブジェクトポインタとメソッドの2つを取得する手法)
の例がある
0213デフォルトの名無しさんNGNG
Windows で kill( pid, SIGINT ) みたいなことってどうやったら
良いのでしょうか?
0214 NGNG
アルバイト版「もうバイトできる自信がない」の1へ

復活したぞ!早く戻って来るように。
0215デフォルトの名無しさんNGNG
>>213
GenerateConsoleControlEvent
0216198NGNG
あー,レスついてるー・・・

>>200さん
んー,確かに,いろんなところで LoadIcon とか LoadCursor とかを
使ったサンプルが沢山あるんだけど,
http://www.microsoft.com/japan/developer/library/jpuipf/_win32_loadicon.htm
http://www.microsoft.com/japan/developer/library/jpuipf/_win32_loadcursor.htm

ってな感じで LoadImage を使えって書いてあったもので
ちょっとチャレンジしてみたんスよー。
どうも失敗気味っすねー。。。
0217デフォルトの名無したんハァハァNGNG
しつもんー。

マルチメディアファイル入出力 (mmio系)の API って通常のファイル入出力 API と何がちがうん?
0218デフォルトの名無しさんNGNG
>>217
MSDN読んでもわからなかったら首吊って死ね。
0219デフォルトの名無しさんNGNG
ぐは。

ってか、わかんなかったから聞いてるんだよ。
API バイブル見たけどやっぱり和下欄。
0220デフォルトの名無しさんNGNG
親フォルダが違う2つのファイルのシェルコンテキストメニューの生成方法を教えて。
特にGetUIObjectOfに渡すパラメータの設定がわかりません。
親フォルダが同一の場合はわかるけど。
0221デフォルトの名無しさんNGNG
>>216
LoadImage()後にCopyCursor()
0222デフォルトの名無しさんNGNG
age
0223デフォルトの名無しさんNGNG
GetVersionEx
なのですがWindowsXPはどう返してくるのですか?
また何どのへんを調べれば発売前のOS情報をえられますか?
0224217NGNG
>>217-219
やぱーりわかんない。おしえてくらはい。
0225デフォルトの名無しさんNGNG
>>224
首吊って死ね
0226デフォルトの名無しさんNGNG
>>217

http://www4.big.or.jp/~yofune/
0227デフォルトの名無しさんNGNG
http://www2u.biglobe.ne.jp/~hole/
0228nanasisanNGNG
>>227
スレと無関係。つーかブラクラに近いモノがあるな。
0229デフォルトの名無しさんNGNG
>>226
たのしい?
vcppML見てる奴には言われなくてもまるわかりだし。

よふねもそれぐらい覚悟してたでしょ。
0230デフォルトの名無しさんNGNG
WindowsのHelloWorld!程度なものを書いてます。
で、プロシージャに送られてくるHWNDと、CreateWindowの返値である
ウィンドウハンドルが別の物なのですが…これはどうしてなのでしょうか?
0231デフォルトの名無しさんNGNG
>>230
ソース書いてみろ
0232230NGNG
>>231
長くて申し訳ありませんが宜しくお願いします。エラー処理は省きました。
これのhWndの値と、wndProcの引数のハンドルが違うんです

HWND hWnd
const char* const className = "test";

int APIENTRY WinMain( HINSTANCE inst, HINSTANCE pre_inst, LPSTR cmd, int scmd ){
  WNDCLASS wc;
  wc.style = 0;
  wc.lpfnWndProc = static_cast<WNDPROC>(wndProc);
  wc.cbClsExtra = 0;
  wc.cbWndExtra = 0;
  wc.hInstance = 0;
  wc.hIcon = LoadIcon( NULL, NULL );
  wc.hCursor = LoadCursor( NULL, IDC_ARROW );
  wc.hbrBackground = static_cast<HBRUSH>(GetStockObject(WHITE_BRUSH));
  wc.lpszMenuName = NULL;
  wc.lpszClassName = className;

  RegisterClass(&wc);

  hWnd = CreateWindow(
      className, className, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
      100, 100, static_cast<HWND>(0), static_cast<HMENU>(0), 0, static_cast<LPVOID>(0) );

  ShowWindow( hWnd, SW_SHOWDEFAULT );
  UpdateWindow( hWnd );


  MSG msg = { 0,0 };
  while(GetMessage(&msg, NULL, 0, 0)){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }

  return msg.wParam;
}
0233nanasisanNGNG
>>232
それはそういうもんだと思うけど。
どっちのハンドルを使っても問題なく処理できたよ。
テストしたのはSetWindowText()だけど。
ウインドウへのハンドルをあらかじめ複製してくれてるような感じ。

明確な資料は忘れたんで探してくれ。
0234232NGNG
>>233
ありがとうございます、そういうもんなんですね。
ちなみにサブクラス化の関係でプロシージャ側のハンドルを使って色々やる必要があったんです。
もう一度MSDNのウィンドウズハンドラの辺りを良く読んでみます。
0235デフォルトの名無しさんNGNG
RegSetValueExでレジストリに書くとき
char* の文字列はWin98,NTで問題なく書けるけど
wchar_t* の文字をWin98でも書きたいときとかどうすればいいの?
バイナリで書くしかない?Win98がUnicode対応してないから厳しいんだけど。
0236210NGNG
遅レスで申し訳無いのですが、システムメニューを
書き換えるとタスクバーを右クリックしたときのメニュー
なども変わってしまいますよね。
「タイトルバーを右クリック」の時だけ違うメニューにする
にはどうすればいいでしょうか?
0237デフォルトの名無しさんNGNG
>236
WM_NC〜
0238210NGNG
ダイアログボックスではダメということはあるのでしょうか?
例えば、ダイアログプロシージャ内で

case WM_COMMAND:
  switch(LOWORD(wParam)){
    case WM_NCRBUTTONDOWN:
      MessageBox(hDlg,(LPCSTR)"ノチー",(LPCSTR)"(・Θ・)",MB_OK);
      break;
   (以下略)

のように記述したとしても全く無視されてしまうのですが…。
(実際にはこの部分にTrackPopupMenuで独自のメニューリソースを
 表示させたい)
0239デフォルトの名無しさんNGNG
>>238
お前そもそもWM_COMMANDの使い方が間違ってる
0240210NGNG
>239
おっしゃるとおりでした。
なんで、WM_COMMANDの下に書いてるんだ、俺は…。鬱駄。
0241sageNGNG
ほのぼのage
0242デフォルトの名無しさんNGNG
VBで乱数を連続で取得するとなぜか数字が近いっす。
んで、それを解消するのにWINAPIのSleep使ったら?って
言われたんすけど、いかように?
乱数を取得するまえにsleepをはさんだらよろしか?
sleep(1)
myvalue = int((43 *rnd) + 1)
こんなん?初心者でスマソ
0243デフォルトの名無しさんNGNG
>>242
randomizeじゃないのかなぁ?
asleepは関係ないと思われ
0244潜伏中NGNG
>>242
アプリケーションの起動時に時刻を元にRandomize(乱数を初期化)すると良い。
Sleepでスリープさせても後で得られる乱数値は何も変わらないぞ。

具体的には Randomize (Time) を事前に実行させておけばOK。
0245デフォルトの名無しさんNGNG
グローバルフックをしたいのですが、データの共有にメモリマップトファイルを使っています。
それで他のプロセスにDllがインストールされた時、マップトファイルのオープンに
失敗した時の処理はどうすればいいのでしょうか。知りたいのは、
・例外を出した場合、誰がそれを補足するのか?
・CallNextHookExを呼ばなくても、せいぜい何かのアプリが働かなくなるくらい
ですむのか(OSが内的に使用してないか)
ですが、お願いします。
0246デフォルトの名無しさんNGNG
>>245
例外を投げても、それを補足する奴がいないから、
デフォルトのハンドラが呼ばれると思う。
早い話が、逝ってヨシ。

たとえ自分が働けなくなっても、CallNextHookEx を呼んでおかないと、
たぶんシステムの挙動がおかしくなる。

そもそも、共有メモリをオープンできなかったときの処理を質問されても、
「そんなこと、知るわけねーだろっ!」としか言いようが無いぞ。

共有メモリのオープンに失敗するかもしれないという心配から
開放されたいのなら、たとえば共有セクションを作るとか、
探せばいろいろ方法があるだろ。
0247245NGNG
246さん、ありがとうございます。
共有セクションですか、分かりました。調べてみます。
フックプロシージャがフックハンドルを引数として受け取ってくれるか
帰り値をノンゼロにすればCallNextHookしてくれるとかだと便利なんだけどなあ。
0248246NGNG
>>247
グローバルフックの場合、CallNextHookEx に渡すフックハンドルには、NULL を与える。
無理矢理フックハンドルを渡すと、確か失敗する。

共有セクションを作りたいなら、リンカの /SECTION オプションか、
定義ファイルの SECTIONS を調べてみれ。
0249242NGNG
>>243,244
ありがとうです!
やってみます。
0250デフォルトの名無しさんNGNG
>>248
むかしNULLを渡したら挙動がおかしくなったことがあったけど
グローバルフックでもちゃんとフックハンドル渡さないと駄目
0251248NGNG
>>250
残念でした。それは実は間違ってるんだよ。

ウソだと思ったら↓のサンプルをよぉ〜く見てみれ。
(探すの、苦労したんだからぁ...)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnmgmt/html/msdn_hooks32.asp

このサンプル中の hooksdll.c は共有セクションを作ってるが、
その中にフックハンドルなんて含まれてないだろ?

ってことはつまり、
フックプロシージャが CallNextHookEx を呼び出すときは、
フックハンドルはいつも NULL ってことだ。

だから、グローバルフックでは CallNextHookEx に NULL を渡すのが正解。

…ってゆーか、フック「ハンドル」ではあっても、フック「ID」ではないので、
フックハンドルは他のプロセスでは無効なんだよ。


これ以外にも、Dr.GUI が同じことを書いてた。
でもこちらは URL は見つけられなかった。(スマソ)
0252デフォルトの名無しさんNGNG
>251
ということは
http://hp.vector.co.jp/authors/VA016117/hook.html
や
http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm
みたいにフックハンドルを共有領域に入れてるのは間違いってことですか?
よく見かけるんですが。
0253デフォルトの名無しさんNGNG
>>251
ほんとだ。スパイのソース見たらちゃんと書いてあったよ。
// Note that CallNextHookEx ignores the first parameter (hhook) so
// it is acceptable (barely) to pass in a NULL.
だって。

いまから自作ツールを直そうっと。
0254  NGNG
別アプリのWindowの子ウインドウとして登録したいのですが、
CreateWindowのhwndParentに設定するだけでは駄目なのでしょうか?
ヒントだけでもお願いします。
0255デフォルトの名無しさんNGNG
>>252
共有領域で共有してもバグにはならない。
ただしいつも定数(NULL/0)なので共有する意味がない。
0256デフォルトの名無しさんNGNG
StretchDIBitsがjpegに対応してるらしいのですが、
全然うまくいきません。
そもそもlpBitsのところに渡すバッファが何かわかりません。
ファイルのデータそのもの?

http://www.microsoft.com/japan/developer/library/default.asp?URL=/japan/developer/library/jpgdipf/_win32_stretchdibits.htm
0257デフォルトの名無しさんNGNG
外部からRebarにバンドを追加するのは無理なのかな?
RB_INSERTBANDしても必ず-1が返ってくるのだけど・・・。
0258デフォルトの名無しさんNGNG
>…ってゆーか、フック「ハンドル」ではあっても、フック「ID」ではないので、
>フックハンドルは他のプロセスでは無効なんだよ。

それは嘘。フックはUSERオブジェクトだからウィンドウハンドル
なんかと同じでプロセス間でグローバル。

>>255
共有領域に値を入れてたらいつでもNULLにはならないと思うが。
0259デフォルトの名無しさんNGNG
>>256
BITMAPINFOHEADER::biCompression

>>257
フックすれ。同じプロセス内に潜り込まないとダメ。
0260デフォルトの名無しさんNGNG
>>259
すみません。力不足でよくわかりません。
BI_JPEGを設定しろということでしょうか。
0261デフォルトの名無しさんNGNG
>>260
ていうかそもそもJPEG画像をどうやって用意してるんだ。
lpBitsに渡すのはDIBSECTIONで作られたものに他ならない。
0262デフォルトの名無しさんNGNG
>>261
そのJPEGのDIBSECTIONというのがよくわかりません。
普通のDIBは表示できています。
JPEGのイメージ部分だけをもってこいということでしょうか。
ヘッダごと渡す必要があると思っているのですが。
0263デフォルトの名無しさんNGNG
>>262
だーかーらー、MSDN読んでもわからなかったら首吊って誌ね。
0264デフォルトの名無しさんNGNG
唐突な質問なのですが、
自分自身のプログラムを終了させて、再起動(自分自身を)させる
方法はありますか?
(さきに自分をもう1つ起動させてから終了するというのはなしです(笑)

どうかおしえてください
0265デフォルトの名無しさんNGNG
256じゃないけど詳しい人教えてくれ >>259 >>261

・StretchDIBitsなどでJPEG、PNGが扱えるのは
 出力先のDCがプリンタDCの時だけでは無いのか?

・BI_JPEG、BI_PNGで指定できるのは普通のJPEG、PNGファイルなのか
 それとも圧縮方法が違うBMPファイルの一種なのか?
0266デフォルトの名無しさんNGNG
>>264
なんかDelギコのところで話してるバッチファイル経由ってのはどう?
0267デフォルトの名無しさんNGNG
>>264
fork する。
0268264NGNG
>>266
なんとなく想像はつくのですが、MS-DOSプロンプトが一瞬立ち上がる
わけですよね?それとWindows2000ってMS-DOSプロンプト使えましたっけ?

>>267
fork、なんですか?それは
0269デフォルトの名無しさんNGNG
>>268
コマンドプロンプトはありますよ。cmd.exe, command.com 両方。fork() は UNIX の
話だから無視して良いでしょう。(しかも要件満たしてないし)

ところで、なんでプログラムを「終了」してから「再実行」させたいのですか? 目的
を書いた方が、適切な手段についてアドバイスを受けられる可能性が高いかと。
0270デフォルトの名無しさんNGNG
起動プログラムを実行
自分終了
起動プログラムから自分再始動
ではいかんのか?
0271264、268NGNG
>>269

プログラムの起動時に読み込むインターフェイス設定(ルックス)を、途中で
切り替えた際に適切に入れ換える(いったん現在のボタンインターフェイスなどを
破棄、生成)のが大変なので、いっそのことプログラムを再起動させようと
思ったわけです。(手抜きです(^_^)

>>270
シンプルで、意外と結構いいかもしれませんね
0272デフォルトの名無しさんNGNG
>>271
それは根本的にプログラムの設計が間違っていると思われ

>>270
それだったら、自分自身がランチャになっても良いじゃん
0273デフォルトの名無しさんNGNG
スレッドハンドルからスレッドがSleep状態かどうか、調べる方法ありませんか?
0274デフォルトの名無しさんNGNG
あ、Sleepじゃなくて、Suspendです
0275デフォルトの名無しさんNGNG
>>273-274
一度 SuspendThread して返値を見てから
ResumeThread して戻しておくとか。
0276デフォルトの名無しさんNGNG
プログラムを実行するときに他のファイルをドロップする物がありますが、
そのファイル名を取得するにはどうしたらいいでしょうか?
0277デフォルトの名無しさんNGNG
>>276
実行するときならコマンドラインを嫁
0278デフォルトの名無しさんNGNG
起動後なら
 DragAcceptFiles

起動前ならコマンドラインで普通はいいけど
 大量のファイルの場合は渡せるファイル数に制限があるから
 シェルエクステンションを使う方がいいかもね
0279デフォルトの名無しさんNGNG
質問です。CreateWindowで作成したボタンのキャプションの文字のフォント
を変更するのってどうやって実現するのでしょうか?
0280デフォルトの名無しさんNGNG
今だ!280番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
0281デフォルトの名無しさんNGNG
今だ!281番ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
   
∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
0282281NGNG
ずれた。スマソ。
0283デフォルトの名無しさんNGNG
いや、スマソじゃなくて質問か答えを書こうぜ…(w
0284デフォルトの名無しさんNGNG
>279
CreateWindowだから、ウィンドウのハンドルは取れるでしょ。
それにWM_SETFONTを送る。

マクロならSetWindowFont()
0285デフォルトの名無しさんNGNG
GetPrivateProfileStructで、INIファイルの
指定のキーから複数の値・文字列を取得したいのですが、
struct hogege {
  int a;
  char b[20];  // ファイル名
  BOOL c;
}
のような構造体(INIのキーに記述した順に宣言)を作って
そのオブジェクトをsthogegeと宣言して、
GetPrivateProfileStruct("section", "key", &sthogege, sizeof(hogege), "フルパス名");
と書いたのですが、取得できませんでした。
MSDN見ると英語だけで、読んではみたのですが英語苦手なので勘違いしてる
部分があるかもしれません。
あと、この場合INIファイルに書くときの書式は
[section]
key=1,abcdef.abc,0
とかでいいんでしょうか。
どこが間違ってるのかわからないので上手く説明できないのですが、
どなたか思い当たったら教えてください。よろしくお願いします
02861NGNG
それならココ
http://www.f2.dion.ne.jp/~impact14/
0287279NGNG
284>>解決しました。ありがとう
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
0288デフォルトの名無しさんNGNG
>>285
その場合なら
  [section]
  key=010000006162636465662E6162630000000000000000000000000000AA
こんな書式になりマス。

APIには構造体のアドレスとサイズしか渡してないんだから、
メンバ毎に区切って処理するなんて芸当を期待するのは無茶っす。
0289285NGNG
なるほど!!
助かりました〜、ありがとうございます!
0290デフォルトの名無しさんNGNG
GetExitCodeThread()で質問です。
lpExitCodeに戻ってくる値ですが、
スレッド関数が0x103L(STILL_ACTIVE)と同じ数値を返した場合、
どうやって判定するのでしょうか?
WaitForSingleObject()を使って判定>終了コード取得
と、2段で行うのが正しい方法でしょうか?
0291sageNGNG
>>290
二段で行うのが正しい方法だ
0292デフォルトの名無しさんNGNG
お薦め本ってある?
0293デフォルトの名無しさんNGNG
MSDN斜め読み
0294デフォルトの名無しさんNGNG
無理>293
0295デフォルトの名無しさんNGNG
無能>294
0296デフォルトの名無しさんNGNG
>>292
Petzold 本。
0297フォントの名無しさんNGNG
質問です。
CreateWindowで作成したボタンにアイコンを貼り付けるのは
どうやって実現するのでしょうか?
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
0298デフォルトの名無しさんNGNG
>297
OwnerDrawでがんばれ。
0299デフォルトの名無しさんNGNG
>297
ビットマップボタン
0300300000NGNG
"*.url"のファイルに関連付けされたプログラムを調べる
パーフェクトなやり方ありますか?
0301デフォルトの名無しさんNGNG
>>300
試しに実行してみる。
0302デフォルトの名無しさんNGNG
>>300
パーフェクトかどうかは知らんが、
レジストリHKEY_CLASSROOT以下にアクセス
0303デフォルトの名無しさんNGNG
>>300
HKEY_CLASSES_ROOT\.url の (標準) の値を調べて、その名前を仮に "InternetShortcut" とすると、HKEY_CLASSES_ROOT\InternetShortcut\shell\command\open を見れば書いてある。
030430000NGNG
関連付けされたファイルを探すために
最初は、FindExecutable()を使って調べようと思ったんです。
そしたらこの関数、実在するファイルを指定してやらなきゃいけないんです。
気の利かない関数ですよね!

そこでまぁ、ファイルを作って呼び出してやったんです、
そしたらなんか、取得できた実行可能ファイルは"shdocvw.dll"とか
かいてあるんです。
もうね、、、アホかと。馬鹿かと。
もそこで、もう一度ヘルプを読み直してみたんです。
そしたらちゃんと実行可能 (.EXE) ファイルの名前を取得します、
とか書いてあるんですよ。
そこでまたブチギレですよ!
0305Ruby!NGNG
Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!Ruby!
0306デフォルトの名無しさんNGNG
ネタかいてるヒマあったら>>302-303に礼でもしたらどうだ
0307300NGNG
結局、Rubyでやることにしました。
03083000NGNG
うっ、スンマセン。
レジストリ見てみました、
バッチリ出来そうです。ありがとーございました!
0309デフォルトの名無しさんNGNG
とりあえずMSを小一時間問い詰めてみれ
0310デフォルトの名無しさんNGNG
Win32APIとRubyって全く関係無いのに
0311デフォルトの名無しさんNGNG
>304 >309
激しくワラタ
0312デフォルトの名無しさんNGNG
>>309
3万払っても、仕様ですという回答をもらうだけではないかと思われ・・・
0313デフォルトの名無しさんNGNG
自分自身を再起動するにはどんな方法が一番スマート?
0314デフォルトの名無しさんNGNG
>>313
首吊って生まれ変われ
0315>314NGNG
12点
0316デフォルトの名無しさんNGNG
FILETIMEの値の比較ってどうやればよいのでしょうか?
APIというか構造体ですが、、、
0317デフォルトの名無しさんNGNG
>>316 MSDNの FILETIME の説明を読めよ。
Copy the resulting FILETIME structure to a ULARGE_INTEGER structure.
Use normal 64-bit arithmetic on the ULARGE_INTEGER value.
0318316NGNG
いや、読んだんですけど、64ビットの変数とか使ったことないもんで・・・
0319316NGNG
ULARGE_INTEGER構造体にmemcpyかまして
QuadPart同士比較でいけました。失礼しました。
0320デフォルトの名無しさんNGNG
とりあえずunionつかっとくと、コピーの手間が省けるぞ
0321デフォルトの名無しさんNGNG
>>310 最近のスクリプトはシステムの API を呼び出すことができる。
0322デフォルトの名無しさんNGNG
やっぱり手っ取り早くここしかないのが残念です。
よろしくお願いでこんばんわ。

えーっと、SendMessage(hEdit,EM_GETMODIFY,..)
でバッファの変更をうけとることなんですが、
なぜか、これ、「変更あり」に対して、-1を返すことが判明しました。
ゆえに、TRUEでは条件一致できません。

みなさんも、こうですか?まぁ、if(SendMessage(..)){}とすれば
すんなり行くんですけど、ぼくは、EM_GETMODIFYに自信がありません。
なんか気持ちが悪いです。素直に1かえしゃーいいじゃんか!

以上ですよろしくお願いします。
0323デフォルトの名無しさんNGNG
>>322
なにがしたいのかワカランが。
EM_GETMODIRYの動作が納得いかないなら、
フックでも掛けてカスタマイズすれば?
0324デフォルトの名無しさんNGNG
ひょっとしたらと思って、バッファの内容に
文字追加、削除の両方で試してみましたが、
やぱりどっちもー1です。(報告)
0325デフォルトの名無しさんNGNG
やりたいことはできました。
要はテキストバッファに変更が
加えられたか、変化なしかを調べたいのです。
でしからif(SendMessage()==TRUE)としました。
けど、これだとダメだったのです。SendMessageの
返り値を調べるとなんとー1でした。
↑納得いきません。よろしくおねがいします。
0326sageNGNG
試してないけど、
真偽値を返すAPIは if(xx() == TRUE) せずに
xx() だけにしとこうよ。

==TRUEや ==trueが身に染みついてるなら
今すぐその癖をやめるべきだと思う。

ふつうのCプログラマなら一生気付かないかもね、そのバグ。
0327デフォルトの名無しさんNGNG
戻り値がboolであれば==trueでも問題は無かろう
APIでは存在しないが
0328デフォルトの名無しさんNGNG
ありがとうございました。>>326
0329デフォルトの名無しさんNGNG
読み込みと書き込みとフォントのみのエディタができました。
が、

もはや僕のパソはヤバイかもしれません。

1)まずプログラムで指定した大きさ以上のテキストを読み込む。
2)ケツが切れるが許容以上のテキストが読み込めてします。
3)そのまま強引に名前を付けてセーブ
4)どうなってるかと思うから、もう一回開く。
5)真っ白(やっぱだめかと思う)
6)それをメモ帳で開く
7)な、なにぃ!

8)白紙のはずのテキスト(セーブ時にはうんこ.txtと名づけました。
、メモ帳で開くとそっくりオリジナルと同じだ!しかもよくプロパーティ
みてみると、バイト数も全く一緒だ!

9)で、もう一回自作エディタで開く。→やぱり白紙だ。
・・・でもプロパーティは0でないバイト数を示している。
(さらに僕のエディタは一応バイト数表示できるけど、0でない
値を示している。

→→ぼくのCディレクトリはやばいですか?
0330デフォルトの名無しさんNGNG
追伸です。

さらになぜかメモ帳で開けてしまったそれを、
どうせなのでメモ帳から上書きしました。

それを自作エディタで開きました。

オリジナルのものの、最初の文字(N)が抜けてましたが
開けました。

のち、1)からまたやってみました。

コンドはコンドームでセーブも読み込みも
出来るようになってるんですけど・・・

うんこ.txtやばいっす、ファイル的に。

・・・・・解説してください。。
0331解説NGNG
現象:
・プロパティを見るとサイズは0じゃない。
・メモ帳でも普通に表示出来る。
・キミの自作エディタでは読みこんでも表示されない。

結論:
その自作エディタがバグってます。
0332デフォルトの名無しさんNGNG
ちなみに半角英数は一文字1バイトでカウント
されていることをしりました。
0333デフォルトの名無しさんNGNG
許容バイトを超えると読み込みを中止するルーチンを
わざわざ取ってから実験してみた僕の生き様に答えてくださいYO
0334デフォルトの名無しさんNGNG
>>329 見事なREAL厨房っぷりでワラタ
0335デフォルトの名無しさんNGNG
ちなみに読み込みも書き込みもReadFileとかCreateFile(API)
を利用しています。初歩です。
0336デフォルトの名無しさんNGNG
俺はまじめダ!!
0337デフォルトの名無しさんNGNG
お前は本当に解説が欲しいのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、うんこ.txtって言いたいだけちゃうんかと。
0338デフォルトの名無しさんNGNG
>>316

単純にFILETIMEの大小比較ならCompareFileTime()って関数が便利だぞ。
0339フォントの名無しさんNGNG
質問ですが、ボタンをクリックしたときの処理はかけるんですが、
ボタンを押し続けたときのメッセージはどのように取ればいいのでしょうか。
たとえばあるボタンを押したままでいると、表示される数値が増加する、
というようなものを実現したいのですが。
0340デフォルトの名無しさんNGNG
>>339 ボタンを押されたときにタイマーをセットすれば?
SetTimer と WM_TIMER を参照。
0341デフォルトの名無しさんNGNG
うんこ.txtのことは忘れることにしました。
素直に許容以上のファイルを受け入れないルーチンをつけて続行中です。

エディットボックスに右栗のポップアップをつけます。

WM_NOTIFYを捕まえるか、フックをかけるか
考えています。メモリ的、処理的にどっちがいいか、
よい意見があればお聞かせください。

最近調子に乗っていたので、今日は謙虚に耳を傾けた
いです。よろしくお願いします。
0342デフォルトの名無しさんNGNG
LPかRP_BOTTONDOWNを捕まえて、
そこでタイマを発行し、・・BOTTONUPで、
タイマを取得すればいいと思います>>339
0343デフォルトの名無しさんNGNG
・・・・とりあえずWM_NOTIFYの方向でいくので
よろしく・・・・・・
0344316NGNG
>>338
ありがとうございます。こういうのを求めてました。

余談
手元にFILETIMEが載っているヘルプが3つあるんですが、
良く読んでみると1つだけがCompareFileTimeへリンクしていました。
全部同じ内容かと思って甘く見ていた・・・・
0345素人NGNG
WinAPIを使用してRS232Cを制御したいのですがどうしていいかわかりません。
具体的なプログラムのサンプルが載っている本、HPございましたら教えてください!
よろしくお願いします!!
0346デフォルトの名無しさんNGNG
素人には無理です
さようなら
0347デフォルトの名無しさんNGNG
>>345
CreateFile、ReadFile、WriteFile、DeviceIoCtrl
0348デフォルトの名無しさんNGNG
>345
日本語のWin32APIヘルプがお手持ちの開発ツールCDROMに入っていませんか?
みつけて"通信の概要"を検索し熟読をお勧めします

CreateFileで COM1 を開いて
BCDの設定を
BuildCommDCB("baud=9600 parity=N data=8 stop=1", &DCB);
のようにして
ReadFile/WriteFileするだけです
0349デフォルトの名無しさんNGNG
ふと思ったのだが、たのむから素人がバグって言うな。
もっと丁寧に考えろ。
そえはお前のミスだということを知れ。

ちなみにオレは日本ボAPIヘルプなんか持ってない。
LCCから頂戴した英語版ダ>>348
0350デフォルトの名無しさんNGNG
よろしくお願いします!
ありがとうございます。

エディタ作りでドラッグ&ドロップをWM_NOTIFYを捕まえる(横取り)かフック、
っていうかサブクラスるか考え、WM_NOTIFYの
方向にしました。とても難しかたです。横取りの方法では
ENDROPFILES構造体を使わねばならず、ほとんど
資料はありませんでした。この構造体はENDROPFILES
cp:Character position at which the dropped files would be inserted.
ていうメンバがあって要はエディット部の、どの位置にファイルが
D&Dされるかの位置指示子です。エディットに何も書かずにD&D
するとこの値が不正らしく、カーネルやらシェルエラーがぴよぴよ出て、悩まされましたが、
とりあえず適当にナンか書いてカーソルを適当な位置に置いておくと
成功です!万歳!
漏れは天才です
ありがとうございmす!
でも多分これからサブクラス化します。
0351デフォルトの名無しさんNGNG
CInternetSession
のOpenURLでウェブページ(HTTP)にアクセスする際に、
URLが不正だったり、指定のURLのサービスが利用できない際に
それを知る方法はありますか?
インターネットそのものにアクセスできない場合は、例外をcatch
することでわかるようなのですが。
どうか教えてください
0352デフォルトの名無しさんNGNG
フリーのCコンパイラでWindowsアプリを作りたいんですが、
結構色々あってどれにしようか迷ってます。
とりあえずmingw、bcc,lccが候補に上がっています。
(C++機能は使いません。)
お勧めのコンパイラを教えてください。

所で、WATCOM Cはオープン化して公開されたんでしょうか?
0353デフォルトの名無しさんNGNG
>352
bccを使ってるけどリソースエディタ(ダイアログなんかを簡単に作る機能)がないのは辛い。
APIの勉強ならいいが、実用なら生産性は悪いぞ。
0354デフォルトの名無しさんNGNG
>352
今のはわからんのでもしかしたら今は使えるようになってるのかもしれないが
lccはリソースコンパイラが日本語を通してくれなかった
昔lcc使ってるときはリソースコンパイラだけrc.exe使ってた(苦笑)
それ除けばコンパクトなコードを吐く良いコンパイラだと思う
0355デフォルトの名無しさんNGNG
>>353
ありがとうございます。
bccにはbrc32というリソースコンパイラがあるみたいですが、
やっぱり手書きで作るのはしんどいですね。
(普段は仕事でVisualC++6使ってます。)
bccをちょっと使ってみた所、最適化はそれほど
してくれてないみたいです。(option -p -O2)
(既存のベンチプログラムをビルドした結果、2割程差が出る。)
商用のVisualC++と比べてる時点で酷ですが。
0356デフォルトの名無しさんNGNG
>>355
いや、VCは鬼

>商用のVisualC++と比べてる時点で酷ですが。
BCBのコンパイラ部分をBCC として配ってるんじゃなかったけ?
0357デフォルトの名無しさんNGNG
元々、WinNT4で環境変数(レジストリ)を書き換えた後、下記のコードで
反映させていたんですが、

DWORD dwReturnValue;
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,
(LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);

Win2k+SP2でこいつが効かなくなりました。
何が問題であるのかご教授願います。
0358デフォルトの名無しさんNGNG
>>352
Watcom C/C++ 11.0c が一応誰でも落とせる状態で公開された。
本格的にオープンになるのはもーちょいみたいだけど。
0359デフォルトの名無しさんNGNG
>>358
URL出して
0360358じゃないけどNGNG
これか?検索したら出てきた。
http://www.openwatcom.org/
http://www.openwatcom.org/download.html
0361デフォルトの名無しさんNGNG
age
0362デフォルトの名無しさんNGNG
こんな関数を作ったのですがWin2000だときちんと値を返すのですがWin98だと0
しか返してくれません。このAPIはWin2000専用なのでしょうか?Rasに関する資料
があまりなく困っています。どなたか詳しい方いらっしゃらないでしょうか?

DWORD GetDialiUpEntryNum(void)
{
//エントリの件数
DWORD dwEntry = 0;
// 構造体の宣言と初期化
RASENTRYNAME name;
memset( &name, 0, sizeof(RASENTRYNAME) );
DWORD dwSize = name.dwSize = sizeof(RASENTRYNAME);
// 取得
RasEnumEntries( NULL, NULL, &name, &dwSize, &dwEntry );

return dwEntry;
}
0363デフォルトの名無しさんNGNG
>>362
そんな糞言語は捨ててDelphi使いな。
頭悪そうだよ君。
0364デフォルトの名無しさんNGNG
Del厨房はすっこんでろアホ!
0365デフォルトの名無しさんNGNG
>>362
If the function succeeds, the return value is zero.
なんだが、何か他に質問でも?
0366sageNGNG
>>362
GetLastError()してから出直してこい
0367デフォルトの名無しさんNGNG
Openwatcomは商用ソフト開発ok?
0368デフォルトの名無しさんNGNG
VBスレッドで回答いただけなかったので、こちらで質問させてください。
環境は、VB6.0SP5、WINNTor2000です。
質問です。イベントログを取得しようとし、以下のような方法で、コードを記述したのですが、
イベントログには、ソース (○○○○) 内のイベント ID (9999) に関する説明が見つかりません。
次の挿入文字列が含まれています。と記述されています。
これを避けるためにはどのようにしたらよいのか、どなたか詳しい方、ご教授願えないでしょうか。。。
Appオブジェクトを使う方法ではなく、APIを使用する方法を希望します。

Option Explicit
Declare Function RegisterEventSource Lib "advapi32.dll" Alias _
"RegisterEventSourceA" ( ByVal lpUNCServerName As String, _
ByVal lpSourceName As String) As Long
Declare Function DeregisterEventSource Lib "advapi32.dll" ( _
ByVal hEventLog As Long) As Long
Declare Function ReportEvent Lib "advapi32.dll" Alias "ReportEventA" ( _
ByVal hEventLog As Long, ByVal wType As Integer, _
ByVal wCategory As Integer, ByVal dwEventID As Long, _
ByVal lpUserSid As Any, ByVal wNumStrings As Integer, _
ByVal dwDataSize As Long, plpStrings As Long, lpRawData As Any) As Boolean
Declare Function GetLastError Lib "kernel32" () As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
hpvDest As Any,hpvSource As Any, ByVal cbCopy As Long)
Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Declare Function GlobalFree Lib "kernel32" ( ByVal hMem As Long) As Long

Public Const EVENTLOG_SUCCESS = 0
Public Const EVENTLOG_ERROR_TYPE = 1
Public Const EVENTLOG_WARNING_TYPE = 2
Public Const EVENTLOG_INFORMATION_TYPE = 4
Public Const EVENTLOG_AUDIT_SUCCESS = 8
Public Const EVENTLOG_AUDIT_FAILURE = 10

Public Sub LogNTEvent(sString As String, iLogType As Integer, _
iEventID As Long)
Dim bRC As Boolean
Dim iNumStrings As Integer
Dim hEventLog As Long
Dim hMsgs As Long
Dim cbStringSize As Long
hEventLog = RegisterEventSource("", App.Title)
cbStringSize = Len(sString) + 1
hMsgs = GlobalAlloc(&H40, cbStringSize)
CopyMemory ByVal hMsgs, ByVal sString, cbStringSize
iNumStrings = 1
If ReportEvent(hEventLog, iLogType, 0, iEventID, 0&, iNumStrings, cbStringSize, hMsgs,hMsgs) = 0 Then
MsgBox GetLastError()
End If
Call GlobalFree(hMsgs)
DeregisterEventSource (hEventLog)
End Sub

Sub Main()
Call LogNTEvent("Information from " & App.EXEName, EVENTLOG_INFORMATION_TYPE, 1001)
Call LogNTEvent("Warning from " & App.EXEName, EVENTLOG_WARNING_TYPE, 1002)
Call LogNTEvent("Error from " & App.EXEName, EVENTLOG_ERROR_TYPE, 1003)
End Sub
0369デフォルトの名無しさんNGNG
>>368
>次の挿入文字列が含まれています。と記述されています。

どこに記述されているのですか?
エラーはどの行で起きていますか?
「挿入文字列」は何でしたか?
0370368NGNG
>>369
ソース (●●●●) 内のイベント ID (1001) に関する説明が見つかりません。
次の挿入文字列が含まれています:Information from sub・・・・・.

と、イベントログに出力されています。
挿入文字列は、作成したプログラムのエラートラップより取得したものです。
例:On Error Goto aaa:
とかのエラートラップです。

私がおだししたプログラムの場合ですと、
Call LogNTEvent("Information from " & App.EXEName, EVENTLOG_INFORMATION_TYPE, 1001)
の"Information from " & App.EXEName
が挿入文字列となると思います。
0371デフォルトの名無しさんNGNG
おだしした?
0372デフォルトの名無しさんNGNG
という事で API 関係ないよ VBのコードが間違いだよと 解釈して下さい >>.370
VBスレで 親切な人がいれば教えて下さるでしょう
0373デフォルトの名無しさんNGNG
>>362
RASENTRYNAMEのサイズが変わってるんじゃネーノ?
ソースの先頭に
#define WINVER 0x400
と書くかコンパイルオプションに
-DWINVER=0x400
と追加しとけ。
0374デフォルトの名無しさんNGNG
そこでおいらも少しだけつまづいたことある。

一言言わせてクレ。

ちょっとむかつくとき
   =お気に入りクリックして2ch来ようとしたが、
     変なタイミングでお気に入りポップが下にずれて
      バナーを押してしまったとき。
0375デフォルトの名無しさんNGNG
質問してもいいですか?

僕は、マルチバイトとワイドバイトのどちらでコンパイル
してるかわかりません。シングルバイトってことはないと
思います ティー茶ーつかってもいいですか?
0376デフォルトの名無しさんNGNG
ちなみにsiziofチャーで4が変えるので
マルチバイトだと思います。
0377デフォルトの名無しさんNGNG
374だけど>>373ね。
0378デフォルトの名無しさんNGNG
>>374
> 変なタイミングでお気に入りポップが下にずれて
> バナーを押してしまったとき。
あぁ、時々やるよこれ (涙)。

>>376
sizeof( char ) はどっちでコンパイルしても変化しません。
っつーか、Win32が動く範囲で、sizeof(char)==4 になる環境は無いと思うが。
0379デフォルトの名無しさんNGNG
加藤チャー?
0380デフォルトの名無しさんNGNG
>267にあるように、forkしてwaitpidしてexecじゃいかんのか?
0381デフォルトの名無しさんNGNG
Win9x系ではAutoexec.bat内のPATH=の行に値を
WinNT系では環境変数のPATHに値を書き込めるAPIってあるのでしょうか?
うまく説明できてるかわかりませんが、コマンドプロンプト(MS DOSプロンプト)で
path[Enter]としたときに表示される値をOSによらず
すっぱりと制御できたらうれしいんですが・・・・
0382デフォルトの名無しさんNGNG
>>381
fopen
fread
fwrite
close
0383デフォルトの名無しさんNGNG
oioi
0384デフォルトの名無しさんNGNG
SetEnvironmentValue();
0385デフォルトの名無しさんNGNG
Win2000 や WinNT などの net send で送られてきたメッセージを受けとるにはどう
すればよいでしょうか?
net send は NetBios というプロトコルを使っているということまでは判っています。
どこかの port を見張って待ち構えるというようにするのでしょうか。

送る方は NetMessageBufferSend を使ってできました。
0386ええろNGNG
http://www.himawari.sakura.ne.jp/%7Eloveseat/Adu/index.html
0387デフォルトの名無しさんNGNG
モデムを使って電話できるプログラムがあるが音声モデムの制御の仕方をおしえろ!
0388デフォルトの名無しさんNGNG
また株価が1万円割れましたね

ところで、テキストファイルを保存するとき、
ゴミがついてしまうのは、SetEndOfFile(hFile);
で解決したのですが、こんどは、読み込むとき、ゴミが読み込めません。
ノートパッドだと読み込めるので、どうにか読み込めるようにしたいです。

hFile = CreateFile(szFName, GENERIC_READ, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
SetFilePointer(hFile, 0, 0, FILE_BEGIN)
ReadFile(hFile, szStr, 1024*64, &dwAccBytes, NULL);
szStr[dwAccBytes] = '\0';
Edit_SetText(hEdit, szStr);

こんな手順です。
ひょっとしたら、CerateFileやReadFileはなにか勝手なこと
をしてるかもしれないので、いっそのことfopenとかreadを
使おうかとも思いましたが、API命令の方が速いという話も
あるし、よくわかりません。
アドバイスお願いします。
0389デフォルトの名無しさんNGNG
CreateFile と ReadFile の返り値くらいはチェックすべき。
0390デフォルトの名無しさんNGNG
>>388 共有モード dwShareMode 間違えてない?
0391デフォルトの名無しさんNGNG
if (hFile == INVALID_HANDLE_VALUE){
MessageBox(NULL, "ファイルハンドル取得失敗!", "Error", MB_OK);
CloseHandle(hFile);
dwSize = 0L;
return;
CreateFileの返り値は上のように以前からしてありました。

if(!ReadFile(hFile, szStr, 1024*64, &dwAccBytes, NULL))
MessageBox(hWnd,"読み込みが不正に終りました:ReadFile();","Error",MB_OK);//!!
↑今回このようにしてみましたが、ゴミ付きファイルは、ゴミが
読み込めません。(説明が悪かもしれませんが、読み込みはできる
のですが、ゴミが読み込めないのです。ノードパットにはきちんと
ゴミが読めています。)
(388)
}
0392デフォルトの名無しさんNGNG
390読み込んでバッファに移したらすぐ、
CloseHandleを行っています。多分問題
ないと思いますがだめでしょうか>390
0393デフォルトの名無しさんNGNG
すごい偶然だとおもうのですが
VC++スレの者ではありません。
0394デフォルトの名無しさんNGNG
ゴミまでは何バイトですか? 念のため dwAccBytes もチェックしておきましょう。
char mybuf[256];
wsprintf(mybuf, "読みこみ:0x%lx", dwAccBytes);
MessageBox(NULL, "読みこみ", mybuf, MB_OK);
0395デフォルトの名無しさんNGNG
ファイルは結構大きいので、メッセージボックスでは無理ですが、

CreateFile成功確認後の、
dwSize = GetFileSize(hFile, NULL);
は、(int)(dwSize)が31701バイトを示し,

ReadFile(hFile, szStr, 1024*64, &dwAccBytes, NULL)
lplen=lstrlen(szStr);←int
は、31690を示します。

ウィンドウズのプロパーティはやはり31701を示しています。
0396デフォルトの名無しさんNGNG
>>395
そりゃ lstrlen したら '\0' までの長さしか得られるわけないっしょ。
読み込む分には読み込めてるから、読んだ文字列を
Editコントロールに設定する時のコードを何とか工夫しろ。
0397デフォルトの名無しさんNGNG
>>395
>ファイルは結構大きいので、メッセージボックスでは無理ですが、

>>394
>wsprintf(mybuf, "読みこみ:0x%lx", dwAccBytes);
>MessageBox(NULL, "読みこみ", mybuf, MB_OK);
これ、読みこんだバイト数を表示するんだよ。
デバッグ使えたら、ブレークポイントとウォッチ式を置いて、直接 dwAccBytes を調べてね。
0398デフォルトの名無しさんNGNG
やはりReadFileは使えないのでしょうか?
ReadFileは引数が、ReadFile(hFile,szStr,1024*64,&dwAccBytes,Flag)
なので、\0の検出を勝手にやってしまっているらしいです。

でもなんとなくわかりました。
ファイルが、ハードディスク内部で、

始まりの記号honararaparanononofoiu\0gomigomi\0\0\0\0\0\0\0\0......
と展開され、API定義のReadFileでは長さを設定できないので、
勝手にきられてしまうんですね
0399デフォルトの名無しさんNGNG
元手ただでやっております。フリーのターボデバッガも
あるのですが、これでもdwAccBytesを追えるでしょうか?
0400デフォルトの名無しさんNGNG
デバッグ版としてコンパイルすれば、[Data/Inspect] メニューからできるはず。
0401デフォルトの名無しさんNGNG
ありがとうございます。
0402デフォルトの名無しさんNGNG
・・・・・・RUNするとData/Inspect選べません・・・・・
0403デフォルトの名無しさんNGNG
>>402
ブレイクポイント設定していないだろ?

http://user3.allnet.ne.jp/tadnakam/bcc32/td32.htm
0404デフォルトの名無しさんNGNG
>>398

ハァ?
ReadFileはバイナリアクセスだから'\0'の検出なんかしないぞ?
もう一度勉強しなおせ
0405396NGNG
>>398
> ReadFile(hFile,szStr,1024*64,&dwAccBytes,Flag)
1024*64って長さ設定出来とるじゃないか。
だからそのコードで全部最後までちゃんと読み込めてるっての。

# それに、freadだって最終的にはReadFileを呼んでいる。
0406デフォルトの名無しさんNGNG
でもそうすると、
dwSize =GetFileSize(hFile,NULL)

と、ReadFile(hFile,szStr,1064*64,&dwAccBytes,NULL)の

lpLen =lstrlen(szStr)
がゴミ分だけ違うことが理解できません。>>404
0407デフォルトの名無しさんNGNG
おっと・・・・
ということは、szStrの時点では正常に
書き込まれていて、Edit_SetText(hEdit,szStr)
が悪さをしているってことなののでしょうか
しかし、Edit_SetTextが勝手に理解している終記号が・・・
\0・・・・なのですか!
0408デフォルトの名無しさんNGNG
>>407
Windows でテキスト、あるいは文字列と呼ばれるものは
\0 (ワイド文字の場合 L'\0')で終わると仮定されている。
だから、文字列として渡すと \0以下が落ちる。Edit_SetText の場合も同じ。
0409デフォルトの名無しさんNGNG
それでもEDITコントロールを使いたかったら、EM_SETHANDLE を使う方法がある。
そのとき親ウィンドウに DS_LOCALEDIT スタイルをセットしないといけない。
0410デフォルトの名無しさんNGNG
低水準関数read(szFName,szStr,1)
についてなのですが、この関数は必ずszStrの
先頭から書き込んで行くとは限らないのですか?

一度Edit_SetText(hEdit,szStr,0,0)で使った
szStrに、read()で何かを読み込むと、明らかにszStrの先頭に
変なヘッダ情報みたいのがついています。for i〜if szStr[i]='\0'
みたいなのをやって確認したんですけど・・・・・・
0411デフォルトの名無しさんNGNG
while(1){
if(0==(read_flg=read(hFile,szStr,1)))
if(0==(read_flg=read(hFile,szStr,1))){szStr[tell(hFile)-1]='\0';
read_flg=read(hFile,szStr,1);
if(read_flg==0)break;
}Fsize=tell(hFile);
で読み込んで、

for(i=0;i <= Fsize;++i){
if(szStr[i]=='\0')
szStr[i]='h';}

szStr[i]='\0';最後の\0ENDOFSTRING

このszStrは既に一回使ったものなんで、今回上書きです。
EditSetTextでエディットに表示すると、
先頭に、ウィンドウ(hWnd)タイトルに表示しておいた
テキストが、くっついてきます・・・・・・
0412デフォルトの名無しさんNGNG
if((-1)==(hFile=open(szFName,O_BINARY|O_RDONLY)))です
0413デフォルトの名無しさんNGNG
先頭2行目と3行目のif文は無視してください。ごめんなさい。
0414デフォルトの名無しさんNGNG
>>410
_read と read を間違えていませんか? _read 前後はどのように書きました?
_read の返り値も教えて。
0415デフォルトの名無しさんNGNG
うー、僕の本は新版実習C言語っていうんですけど、
_readなんて出てませんでした。readはでてました。
でも、_readもあるみたいですね。
0416デフォルトの名無しさんNGNG
readやcloseやopenをすべて_※で置き換えてやりましたが、
やっぱり変なのがヘッダについています。
0417デフォルトの名無しさんNGNG
Fsize は初期化しましたか?
0418デフォルトの名無しさんNGNG
ライブラリやAPIのせいにするのいい加減やめろ
お前のプログラムが腐ってるに決まってるだろ
0419デフォルトの名無しさんNGNG
初心者に限ってすぐに「言語製品のバグです」などと平気で言う。
お前の頭がバグってんだよ。
0420デフォルトの名無しさんNGNG
わざわざ初期化の意味で0を代入すると、コンパイル時警告で
「値は使われてません」と出るのはなんでですか?
安全のため警告を無視して初期化文を残して
置いた方がいいですか?
0421デフォルトの名無しさんNGNG
>>420
それはWin32APIの質問なのか?
0422デフォルトの名無しさんNGNG
>>414ごめんなさい、読み込めていませんでした。
けれど、グローバルで、szStr宣言して、読み込みサブルーチンの
なかでもszStrを宣言しているのですが、関数の中で宣言したものは
独立だと思っていたのですが、ちゃんと、他の実行単位で使用した
szStrの内容がのこっているのは驚きでした。

っていうか低水準で立ち向かうのって無謀ですか?っていうか無理
ですね、read使う場合は。高水準でfopenとか使った例を見つけたので、
参考にやってみたいと思います。
0423デフォルトの名無しさんNGNG
あぁ、勘違いですね。どうやらReadFileに毒されていたようです。
更に、文字一個読むとポインタが自動的に一個ずれるというような
ことをどっかで聞いたのが聞きました。それはfgetcですね。とかですね。

あぁ、readは、まいかいまいかいszStrに最初から書き込んでいたことを
知り、疲れ果てるばかりです・・・・・・
0424デフォルトの名無しさんNGNG
>>423
サンプルプログラムを必死になって探しなさい。
Web検索するとか、本を探すとか。
0425デフォルトの名無しさんNGNG
はい、僕の頭はバグってました。強い憤りを覚えます。
僕の脳みそは1バイトを16ビットで換算しており、
readについても誤解していたようです。readでは
与えた配列ポインタに毎回書き込まれることについて、
頭が混乱してました。
1バイト8ビットなら話は簡単です。しかも上位下位わかるのなんか
造作もない。16で割り算すればいいんですから。
0426デフォルトの名無しさん NGNG
win2kでPCCardを停止する方法を教えてください
win95の時はAPIをではなく

rundll32 mspcic.dll,ejectsocket 1

でやっていたのですが
お願いしますヒントだけでも
0427デフォルトの名無しさんNGNG
VBで、N88−BASIC!などにあった
「READ〜DATA」を実現する方法が
あったら教えてください、困ってます。とほ。
0428デフォルトの名無しさんNGNG
while(1){
read_flg=_read(hFile,szBox,1);
if(read_flg==0)break;
if(read_flg==-1)break;
// if(szBox[0]='\0')szBox[0]='h';
wsprintf(szAsc,"%02x",szBox[0]);
strcat(szStr,szAsc);
// lseek(hFile,1L,
}
皆様。上記プログラムで難なく通ります。16進表示なんてちょろいです。
まぁ、時間はかかります。

けど、ですねぇ、%02xに注目してください。%2xだとウィンドウズ
エラーと、コンパイル警告が出ます。重要なんですか?だれかしっていますか?
それと、もしそうなら、大文字のXっていうのも見たことあるんですけど、
これも重要なんですか?どう重要なんですか?ちなみに全部charでいけますよ。
Box[2]
Asc[3]で最初\0で埋めています。static宣言はいりません。
0429デフォルトの名無しさんNGNG
皆さんごめんなさい。Boxはintでないとだめです。
%02xの前にスペース入れてみてわかりやすく見たらちょっと
バグってます。あぁ、あと、xとXは16進の大文字と
小文字の違いくらいですね?考えて分かったつもりになりました。

でも02はどうなんでしょう・・・・・・か・・・・
0430デフォルトの名無しさんNGNG
なはーんで無視すんのサ!これでどうだ。
  szRtn[0]= (char)0x0d;
szRtn[1]= (char)0x0a;
szRtn[2]='\0';
・・・・・・・・・
strcat(szStr,szAsc);
if(i==16){strcat(szStr,szRtn);i=0;}i++;
0431デフォルトの名無しさんNGNG
この板みれば、バイナリーエディタ作ろうとして
同じ思いで検索板駆け回ってる人はすぐできるYO。
(この板たまにヤフーで引っかかるからなぁ(藁
0432デフォルトの名無しさんNGNG
>>431
googleならかなりの確率で引っかかるが。
0433デフォルトの名無しさんNGNG
あとから見た人へ。xzBoxはcharじゃだめだYO<<428
0434デフォルトの名無しさんNGNG
>>428
・szBox とやらは unsigned char にしろ。
・↑つーか1byteずつしか読まないのならわざわざ配列にするな。
・%02x じゃなくて %2x にするとスペース埋めになって嫌な感じだと思う。
・>>430 char szRtn[]="\r\n";

> まぁ、時間はかかります。
 ・毎回strcatするな。異様に無駄だ。
 ・wsprintf使わないで自前で変換すれ。
 ・1バイトずつじゃなくて、ある程度まとめて_readするように。
0435デフォルトの名無しさんNGNG
http://cocoa.2ch.net/test/read.cgi/linux/1002807876/10
0436デフォルトの名無しさんNGNG
あーぁ、コンドは、ReadFileつかって一回配列に落とした後、16進表示
してみました。これがなかなかうまくいかず、さいぼにたどりついたのが、
unsigned charでした。charっていうのもreadみたいにヘッダで中身替えられチャ
ってるっとことですか?

途中でintとか使ったので、intが16の8乗で、2の32乗ですか、60000の
更に2乗ですか、チャーと全然違うじゃないですか。しかもチャーは定義を変えられてる
感じがするんですけど。茶ーは2の何乗ですか?16乗でも足りないって言うんですか?
unsignedチャーは平和でいいですね。
0437デフォルトの名無しさんNGNG
うぜーよ氏ね
APIと関係のない質問ばかりえんえん続けやがって
答えるほうも答えるほうだ
0438デフォルトの名無しさんNGNG
ちなみにint配列に読み込んだとき32ビット中の4つの8ビットの塊が
坂さまになってるのをどうにかして下さい。
0439デフォルトの名無しさんNGNG
SunかMac買え
0440デフォルトの名無しさんNGNG
いや、LOWORDマクロとHIWORDマクロ使えば立派にAPIだとおもう
0441デフォルトの名無しさんNGNG
HIWORD(HIWORD(szBuf(j)))が何故0を返すのか
おしえてクダサイ。LOWORD(LOWORD
も同じです。ものはffffffffとかだったのに。
0442デフォルトの名無しさんNGNG
いいからとっとと氏ね
0443デフォルトの名無しさんNGNG
while(((int)dwSize-4*(j-1))>0){
H=(szBuf[j])>>16;L=(szBuf[j++])&0xFFFF;
A=H>>8;B=H&0xFF;C=L>>8;D=L&0xFF;
wsprintf(szAsc," %02x %02x %02x %02x",D,C,B,A);
strcat(szStr,szAsc);
if(i==4){strcat(szStr,szRtn);i=0;}i++;
}
くそったれオレの生き様をみろ!
0444デフォルトの名無しさんNGNG
前よりちーとは速くなったぞ。ちなみに前のやつはこうだ。

if((unsigned char)szBuf[j++]=='\0')strcat(szStr," 褐");else
strcat(szStr,szAsc);
テキスト中に¥0があると褐がはいるって寸法だ。ちなにみunsigned charは
自分でみつけました。
0445デフォルトの名無しさんNGNG
whileって括弧の中が0以上だったらっつー条件じゃなかったっけ?
while doだっけ? 〜〜>0つけなかったらぐるぐる回ってしまったYO
0446デフォルトの名無しさんNGNG
APIのリッチテキストのストリーム処理では
どんな風に処理してるんですか?
0447デフォルトの名無しさんNGNG
>>436
char はたぶんキミの環境だと -128〜127 だ。
これをwsprintfに渡すためにintに拡張すると 0xffffff80 〜 0x0000007f だ。
それを%02xで表示すると、元々1Byteなはずなのに16進で8桁くらい表示されることがありうる。
unsigned char ならたぶんキミの環境だと 0〜255 だ。以下略。
>>438
リトルエンディアン/ビッグエンディアンで検索。
>>441
0になって当たり前だろ。少しは考えろ。
>>445
中学校逝って英語の勉強してこい。
0448デフォルトの名無しさんNGNG
ダイアログテンプレートの使い方教えてくれ!
0449デフォルトの名無しさんNGNG
>>447そうですね。0になりますね。
調べてないけどHILOWORDマクロは
ビットシフトとマスクを32ビット仕様でやてるんでしょうね。

だけど言わせてクレ。どっかで、だ、

「*」はポインタと掛け算で使われてるけど、
二つは深い意味では、コンピュータ内部の処理としては、
同じ意味でつながってないですか?と聞いたのだ。チャットだ。

そいつはなんだか漏れのことを愚弄するかのように笑っていた
が、やっぱ、あいつはヴァカだ!

最近のコンピュータでは掛け算の積は、いちいち計算するのではなく、
どっかに2次配列かなんかで格納されてるって聞いたことがある。

ポインタやればやるほど、掛け算は、内部の掛け算フィールドへの
ポインタ移動みたいな感じだと確信してくるゾ。ヴァカめ。クソめ。

言語は美しく出来ているのダ!
0450デフォルトの名無しさんNGNG
僕は今のところビットシフトとマスク(マスクよりシフトの方が好き)
が気に入っています。これらはかなり使えるんですか?使えないのに
好きになってしまう前におしえてクダサイ。
0451デフォルトの名無しさんNGNG
ちなみに僕はなかなかやる男なので441=443です。進化しました。
0452デフォルトの名無しさんNGNG
おもに、どっちの穴でやりますか?>451
0453デフォルトの名無しさんNGNG
マンコに決まってんだろ>>452
0454デフォルトの名無しさんNGNG
>>451
進化おめでとう。どっちが好きとか言わず、両方やっとけ。
http://www2.freehostzone.com/~freeasian/action48/005.jpg
0455デフォルトの名無しさんNGNG
Forbiddenされてんゾ>>454
0456デフォルトの名無しさんNGNG
strcat(&szStr[k],szAsc);k+=12;
if(i==4){strcat(&szStr[k],szRtn);i=0;k+=2;}

このように、やりました。格段に速いです。理由はだいたい
わかります。strcatは今後も安全のため暫くお世話になる
つもりです。

ところで、signed と、unsigned charを分けることによって
どう使い道がちがうんですか?おおもじょと小文字の区別って
漢字ではないような気がするんですけど。たまにある符号付
intとかのキャストとかのためだけにあるんですか?
0457デフォルトの名無しさんNGNG
でも僕は別にバイナリエディタ作ってるわけじゃなかったので、
暫く考え直したいと思います。
0458デフォルトの名無しさんNGNG
>>454使えるかどうかおしえてクダサイ。

あとポインタと掛け算なんですけど、彼の
言っていることは、あってるんですか?
0459デフォルトの名無しさんNGNG
すいません。これから新たにCreateWindowで
ウィンドウを追加したい者です。

CreateWindowに識別子(HMENU)hoge
の項目があるのですが、これの利用法
をおしえていただけないでしょうか。

この新しいウィンドウに来るメッセージを
手軽に識別するために利用したいのですが、
そういった種の識別子ではないのですか?
0460デフォルトの名無しさんNGNG
>>459
MSDN Library は読みましたか?
0461デフォルトの名無しさんNGNG
>>459
WS_OVERLAPPEDのときは(HMENU)として使われるんですけど
WS_CHILDスタイルのときは(UINT)とかにキャストした値を入れて
ウィンドウIDとして使うんですよ。
まったく、なんて仕様だろう。
0462デフォルトの名無しさんNGNG
たびたびすいません。459です。

あんまりサブクラス化するとプログラムが
煩雑になるので、できれば子ウィンドウの
KeyUpやKeyDownを(HMENU)IDをつかって
捉えられないかと考えているのですが、で
きると思いますか?
0463デフォルトの名無しさんNGNG
>>462
MSDN読め
0464デフォルトの名無しさんNGNG
case (HMENU)ID_EDITBOX1:
wsprintf(szMyTex,"%d %x",wParam,wParam);
MessageBox(hWnd,(LPCTSTR)szMyTex, "EDITBOX1検出", MB_OK);
SetFocus(hEditEntryBox);
switch(HIWORD(wParam)){
case VK_RETURN:
MessageBox(hWnd,(LPCTSTR)szMyTex, "Return入力検出", MB_OK);
if(!(fstring=(LPTSTR)malloc(64L))){wsprintf((LPTSTR)szMyTex,"Fallstrlen==0? %ld ",sizeof(fstring));
MessageBox(hWnd,(LPCTSTR)szMyTex, "警告!", MB_OK);exit(0);break;}
if(GetWindowText(hEditEntryBox,fstring,64)){
MyFindString(hMainEdit,fstring);}
free(fstring);
break;}break;

こういうことをしてたらメッセージボックスの無限地獄に
陥りました。だれか救ってください。どうやったらできますか?
0465デフォルトの名無しさんNGNG
どうやらキーイベントは親ウィンドウに知らされないっぽいんですけど、
MSGFILTERとか使わない方法でいい方法はありますか?
0466デフォルトの名無しさんNGNG
いや、普通のキーのキーアップダウンは受け付けている模様。
0467デフォルトの名無しさんNGNG
459==464か?
WM_KEYUP,WM_KEYDOWNは、普通のウィンドウとダイアログでは全く処理が違います。
464のプログラムは何をしたいんですか?
それと作ってるのは普通のウィンドウですか?ダイアログですか?
0468デフォルトの名無しさんNGNG
>>466
WM_NOTIFY使え。
0469デフォルトの名無しさんNGNG
>>467最近全部僕の書き込みです。
あれは、親ウィンドウに検索用の小さなボックスを作て、(wantreturnを無しで)
まず手始めにVK_RETURN,あとは、VK_UP,VK_DOWNを、サブクラス化無しで、捕まえ
ようと試みたものです。無理です。多分WM_NOTIFYも無理です。

現在サブクラス化して、VK_RETURNは捕まえましたが、UPDOWNのところで
壁があることが判明しました。ホットキーとかアクセラレータとか仕様とか色んな
言葉が出てきます。

答ついでにというか、基本的に聞きに来たんですけど、VK_UP、DOWNを捕まえる
方法はあるみたいなのですが、参考コードは、いまだみたことのない、::とか
いって、どうも、MFCっぽいっていうか、まぁ、クラス、ですか?みたいなんで
すけど、フリーのBCCで突き進む僕のコードに、前例のないこういった::
とか書いても大丈夫なのでしょうか?c++はオブジェクト指向がなんたらなので
本来は::とか使うほうが筋だと言われればなんにも言えないんですけど・・・
0470デフォルトの名無しさんNGNG
>>469
まずは日本語の勉強から。

「どうも、MFCっぽいっていうか、まぁ、クラス、ですか?みたいなんで」

何が言いたいのか、さっぱりだよ。
0471デフォルトの名無しさんNGNG
僕は::がわからないので、今wxwindowsをダウンロードしています。
なのでこの板とはもしかしたらお別れカモシレナイんですけど、
最後にwswindowsについて語ってください。類似のものがあれば
それも語ってください。
0472デフォルトの名無しさんNGNG
お別れなんて、悲しいこと言うなよ
0473デフォルトの名無しさんNGNG
TEditがなんなのかわかりません。
MFCになると、ウィンドウ間のメッセージのやり取り
とかも自前で構築するんですか?そのためのクラスですか?
TEitの実体がつまめません。
0474デフォルトの名無しさんNGNG
なんで下げるんだYO

あの、質問なんですけど、MFCっていうのは
APIで言うところの、メッセージ苦落下寄りの仕様
なんですか?それに、継承とかいって魔夜化しじゃないんですか?

漏れは::を理解するためにはFOXをやらなくてはなりません。
APIにFOxを加えてプログラムしてみてください。話はそれからです。

っていうかなんで下げるんだYO
0475デフォルトの名無しさんNGNG
>>474
ネタは sage てな
0476sageNGNG
>>475ネタっぽいけど半分本気だ
0477デフォルトの名無しさんNGNG
アルファベットを全角で書いてるとバカっぽいよ。
0478デフォルトの名無しさんNGNG
>>476
それなら、せめて誤字脱字は訂正して、日本語として意味が通る文章に
してくれ。話はそれからです。
0479デフォルトの名無しさんNGNG
こうしてみると、意味の通る文章が書けること、というか
論理的に整合性が取れてることって大切だと実感できる。
0480デフォルトの名無しさんNGNG
http://mentai.2ch.net/test/read.cgi/prog/1002039334/

AA貼ってあるけど、こっちにいくといいかも。
0481sageNGNG
よく見つけたな!

・・・・・感動した!
0482デフォルトの名無しさんNGNG
いいかげんアゲロョ
0483デフォルトの名無しさんNGNG
構造化例外 (__try, __exception )について、各人のポリシーを語って
ほしいです。
MSDNみても構文についてのドキュメントだし、sampleみても、これでいいのか
って感じだし。先に言っておくけど、on error goto か何かと勘違いしている
のはパス。あと、__try{ ... __leave ... } __finally{} で、do {}while(0)
の代わりに使用するってーのも却下。
漏れが却下したのはこういう理由で使えYO!ってーのはあり。

4649
0484デフォルトの名無しさんNGNG
>>483
 スレ違いですよ。
見なかった事にしますから 移動して下さい
0485デフォルトの名無しさんNGNG
OS依存の話しだからここでもいいと思われ
0486デフォルトの名無しさん NGNG
>>484
たしかに構造化例外は win32apiでなくて、osが提供している機能ですね。
適切な擂れが他に見つからなかったのと、win32apiを直で呼ぶ人って、
C言語でゴリゴリ書いている人たちだろうと、ならば 構造化例外もうんこする
くらいにふつーにつかっているだろーと。

おもーたわけです。

擦違いならどこになるのかな。
0487デフォルトの名無しさんNGNG
>>486
構造化例外を使ってるソースなんて、仕事以外でみたこと無いけど。
0488デフォルトの名無しさんNGNG
COM初心者なんですけど
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppvOut)
{
....
}
を作ろうとするとREFCLSIDが定義されてないって怒られる。
どのファイルをインクルードすればいいのか教えてくださいまし。


0489デフォルトの名無しさんNGNG

ひとこと、パレットが変わると総ファイルサイズが変わりますって書いて欲しいよな
0490デフォルトの名無しさんNGNG
>>483

漏れは無いと困るぞ。
無いとSSEとか3DNowとかの拡張命令の使用の可否が判断できん。
CPUのフラグ見ても、CPUが対応しているかどうかしかわからんから、
Winが対応してるかどうか調べるには、
__try { } __exception()で囲って、試行してみるしかない。
0491デフォルトの名無しさんNGNG
 VC++6.0で、mciSendCommandを使ってCDを鳴らすソフトを
創ったのですが、Win2kユーザの方から、『終了させても
CDが鳴ったままで止まらない』との報告がきたのです。
ウチのマシン(Win98)ではちゃんと止まるのですが…。
Win2kでは、なにか特別な記述をしなければ
ならないのでしょうか?
 ちなみに、CD用のクラスのデストラクタで、
::mciSendCommand(id,MCI_STOP,0,(DWORD)NULL);
で止めています。
0492デフォルトの名無しさんNGNG
>>491
うるせー
0493デフォルトの名無しさん NGNG
MCI_GENERIC_PARAMS mciStop;
.
.
.
mciSendCommand(id,MCI_STOP,0L,(DWORD)(LPMCI_GENERIC_PARAMS)&mciStop);


ってーなかんじどうかな?
というか、ちゃんと MSDNなり、APIの使用方法や、Sampleに一度目を通して
見てはどうでしょう。
0494デフォルトの名無しさんNGNG
UnregisterClassを使うとエラーになるんですけど
GetLastError()で詳細を調べようとしても0しか
帰ってきません。
どうやって原因を調べればいいんでしょうか。
0495デフォルトの名無しさんNGNG
while(!UnregisterClass(szAppName, (HINSTANCE)*lpinstance)){
sleep(100);
}
で、真になるまでぶんまわしたら
うまく動くようになりました。
ただ、Window破棄からの待ち時間が足りないだけでしょうか?
0496デフォルトの名無しさんNGNG
非同期のRasなんだけど
RASCONNSTATEのどの状態にどういった日本語を割り当てればよいでしょうか?
そもそも公式な資料などあるのでしょうか?最新MSDNでも英語しかなくて翻訳
に悩むところなのですが・・・。MS公式翻訳が欲しいです。

RASCONNSTATE
{
RASCS_OpenPort = 0,
RASCS_PortOpened,
RASCS_ConnectDevice,
RASCS_DeviceConnected,
RASCS_AllDevicesConnected,
RASCS_Authenticate,
RASCS_AuthNotify,
RASCS_AuthRetry,
RASCS_AuthCallback,
RASCS_AuthChangePassword,
RASCS_AuthProject,
RASCS_AuthLinkSpeed,
RASCS_AuthAck,
RASCS_ReAuthenticate,
RASCS_Authenticated,
RASCS_PrepareForCallback,
RASCS_WaitForModemReset,
RASCS_WaitForCallback,
RASCS_Projected,

#if (WINVER >= 0x400)
RASCS_StartAuthentication,
RASCS_CallbackComplete,
RASCS_LogonNetwork,
#endif
RASCS_SubEntryConnected,
RASCS_SubEntryDisconnected,

RASCS_Interactive = RASCS_PAUSED,
RASCS_RetryAuthentication,
RASCS_CallbackSetByCaller,
RASCS_PasswordExpired,
#if (WINVER >= 0x500)
RASCS_InvokeEapUI,
#endif

RASCS_Connected = RASCS_DONE,
RASCS_Disconnected
};
0497デフォルトの名無しさんNGNG
>>495
MSDNのサンプルで、戻り値をチェックしているのってひとつもなさげ.
たぶん、UnregisterClassでエラー返ってきても、GetLastError()で 0返ってくる
なら問題無いのでは?

予想としては、該当クラスで作った windowが残っているのでエラーとしているが、
windowが消えた時点でclassが削除されるので GetLastError()は 0返す.

「アプリケーションが登録したウィンドウクラスは、アプリケーションの終了時にすべて自動的に削除されます」
と、MSDNにあるので、RegisterClassをしたプログラムが DLLでなければ特に
明示的に UnregisterClassしなくても平気かな。
0498デフォルトの名無しさんNGNG
>>496
直訳で問題無いように思えますが、具体的にどのステータスを日本語
にするのに悩んでいるのでしょうか?
0499デフォルトの名無しさんNGNG
あー、エディットである場所から上を検索したいんだがー、
(下は出来上がってるんだがー、ぁ)
文字列逆さに配列しなおすとか、一度上からやって最下位の
やつを取り出すとかぁ、あー、ごり押しでいけないことはー
ないんだがぁ、あー、もっといいやり方あったら求む。
(あぁ、も、もとませて、ぁ、ください)
あー、揉んじゃぁだめだぞ、ネタスレじゃないゾ。
0500デフォルトの名無しさんNGNG
あー、ちなみに、strstrを想定している
0501デフォルトの名無しさんNGNG
500レス達成万歳!
0502初心者NGNG
あのさ、VisualStudio.NETのベータ版で
CやC++の勉強できる?
誰か教えてください。
0503デフォルトの名無しさんNGNG
>>499
RichEdit使ってEM_FINDTEXTEXを利用したらどうじゃろ?
詳細は聞くな。わしも知らん。
0504デフォルトの名無しさんNGNG
>>502
β2 なら c/c++ もできる.
プロジェクト作るときに unmanaged を選択.
学生さんだったら、アカデミックパックで VC++ 買え.
0505デフォルトの名無しさんNGNG
>>497
ありがとうございます。
DLL作ってるんで、UnregisterClassが必要なんです。
で、これで失敗したあと、また同じものをRegisterClassEXで登録
するとこれまでも失敗し、こいつもGetLastErrorが0を返すんで
悩んでました。
0506デフォルトの名無しさんNGNG
>>505
ほげー、なぞですなぁ。
0507狂牛NGNG
質問です。
VC++6.0でWinAPIを使用してアプリケーションを作成しているのですが、
リソースエディタでダイアログを作成し、コマンドボタンを置いているのですが、
この、コマンドボタンのボタン押下時の処理がかけなくて困っています。
コマンドボタンのクリック時の処理はかけるのですが。
コマンドボタンに対してWM_LBUTTONDOWN等のメッセージは
どのようにして拾うのでしょうか。
0508デフォルトの名無しさんNGNG
コントロールがデフォルトで親ウィンドウに通知するイベントは限られてますからね。
ボタンの場合、WM_LBUTTONDOWNは通知されないです。
WM_COMMANDに乗ってくるBN_PUSHEDあたりで代用できませんか?
どうしてもWM_LBUTTONDOWNが欲しいなら、サブクラス化してボタン自身に処理させるしか。
0509狂牛NGNG
>>508
BN_PUSHEDのメッセージですが、WM_COMMANDに乗ってくる
HIWORD(wParam)をswitch文で拾えばいいのでしょうか。
0510デフォルトの名無しさんNGNG
>>509
そっす。
で、いまさらなんですが、念のためMSDNでBN_PUSHEDの説明見たら、
BN_PUSHEDがあるのは古いWinとのコンパチ性を保つためで、
いまはオーナー描画ボタンにしてWM_DRAWITEMを拾えって
書いてありました。。。ゴメソナサイ
0511デフォルトの名無しさんNGNG
>>509

分かってんじゃん。詳しいことは MSDN で WM_COMMAND, BN_PUSHED を調べてみることだ。

「ボタンを押された」を日常的な意味で読み取ると普通 BN_CLICKED メッセージを使うよね。
クリックはボタンを押してその場所で離すという一連の動作。

大抵のコントロールのメッセージは、Windows が処理してくれていて、
それを捕まえるにはサブクラス化するっきゃないっつうか。
0512デフォルトの名無しさんNGNG
細かいこと言うと、
「Buttonコントロール上でマウス左ボタンを押下」と
「Buttonコントロールが親にBN_PUSHEDを送る」
は等価ではない。

前者はマウス左ボタンを押した瞬間に発生するが、後者はマウス左ボタンを押し
なおかつButtonコントロール上で離された場合に発生する。
後者はButtonコントロール上にフォーカスがある状態でスペースキーを押した
ときにも発生する。

手頃なボタンを左クリックし、ボタン外にドラッグして離してみよ。
0513510NGNG
さらにMSDNをつらつら眺めていたら、コントロールから
WM_PARENTNOTIFYに乗って、WM_LBUTTONDOWNそのものが来るらしい。。。
なにそれー。知らんかった。Windowメッセージの世界は常人には理解しがたい。
0514デフォルトの名無しさんNGNG
あぁ、ありがとさん>>503
だが、すでに検索窓はトップにはりついとるのだヨ
その線でゆくのだ。
0515デフォルトの名無しさんNGNG
意見求む。
自作のエディタでc++仕様だが
リストボックスにプログラム中の
関数のインデックスが出るようにした。
もちろんクリックでも飛べる。

これは使えると思うか?(80字)
0516デフォルトの名無しさんNGNG
ちなみにメモリリークの調べ方教えてください。
単にソースが大きくなったからかもしれないけど
最近プログラム組んだ後IEの画面の更新が走査線
の動きが見えるくらい遅いんです。
0517デフォルトの名無しさんNGNG
ねたじゃないのでマジレすでお願いします。
0518デフォルトの名無しさんNGNG
>>516
VC++ なら

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF);

を main の最初に入れて、デバッグビルドでビルドすれば、リークの有無は分かる。

リークしている個所を突き止めたいなら malloc, realloc, free, new, delete あたりを乗っ取って
自前でログをとるか、売り物だが BoundsCheker, Purify などのツール使う。XLSOFT の Web
Page から BoundsChecker の体験版をダウンロードできるから、とりあえず試してみれば?
0519デフォルトの名無しさんNGNG
>>515
個人的にはリストボックスに表示されるよりも、カーソル直下にある関数呼び出しに対して、
その定義部分に飛べる機能の方が嬉しい。ついでに飛んだ後に、元の位置に戻る機能も
セットで。
0520デフォルトの名無しさんNGNG
>>518
フリーコンパイラとターボデバッガしかないんだ・・・
0521デフォルトの名無しさんNGNG
>515
有料のエディタだったら、似たような機能は標準でついてるね。
単に関数を一覧を表示するんじゃなくて、親子関係にある関数をツリー構造で表示してくれたりしてるとわかりやすいけど。
0522デフォルトの名無しさんNGNG
netstatの結果を得るAPIってありますか?
netstat.exeの出力をパースするしかないでしょうか。
0523デフォルトの名無しさんNGNG
netstat.exe逆アセしろ>522
0524デフォルトの名無しさんNGNG
漏れはMFC派じゃないからあんまり親子関係関係
ないかも。でもあるコールバック専用のルーチンとか
はあるけどね。

あのさ、普通何行くらいのコードかな、普通プログラマは。
今1500行くらいはいってるけど、そうなると
少なくとも漏れにとって自分の機能がちょっと便利。
スクロールさせんのやっぱめんどいョ
0525デフォルトの名無しさんNGNG
さんきゅうなるほど。>>523
秀丸でnetstat.exeを開いたら関数名が見れた。
0526デフォルトの名無しさんNGNG
レジストリに値を保存、読み出しする関数を知りたいのですが。。
Cでそんな関数ありますか?
0527デフォルトの名無しさんNGNG
>>526
Win32APIにあるので、RegOpenKeyExでMSDN検索してみて.
それと、sampleファイルも検索してみて.

つかっているソースは必ずあるから.
0528デフォルトの名無しさんNGNG
>>519
> 個人的にはリストボックスに表示されるよりも、カーソル直下にある関数呼び出しに対して、
> その定義部分に飛べる機能の方が嬉しい。ついでに飛んだ後に、元の位置に戻る機能も
> セットで。
xyzzyみたいな?
0529デフォルトの名無しさんNGNG
>>527
さっそく探してみます。
情報ありがとぅ。
0530デフォルトの名無しさんNGNG
聞きたいのですが、一つのダイアログコールバックプロシージャを
二つ以上のダイアログが共有する(利用する)ことは可能でしょうか。

各ダイアログボックスには識別ID,(IDC_なんたら)がついてる
から可能じゃないか?と思ったのですが・・・。

あと、プログラムを組む過程で、どこかに変数を吐き出すには、皆さんどうして
いますか?いまは漏れはメイン画面にいくつかの変数(マウスのx、y座標とか)
を吐き出しています。一つダイアログを作ってそこに書き出そうかと思っています。
アトムはまだ使っていませんが、手を出そうと思っています。

皆さんどうしていますか?
0531sageNGNG
可能。
可能。
DebugOutputString。
0532sageNGNG
OutputDebugStringだった。宇津志
0533デフォルトの名無しさんNGNG
>>532
漏れも調べてる最中なんだけど、なにぶん
フリーコンパイラにターボデバッガなんで
デバッグには疎いです。

MSDN OutputDebugString
アプリケーションがデバッガを持たないとき・・・・・
アプリケーションがデバッガを持たず、システムデバッガもアクティブでないとき(は、何も起きません。)
↑意味がワカラン・・・・・

追伸 オンラインMSDNって、乗ってないコマンド結構ない?
0534デフォルトの名無しさんNGNG
デバッガを使いこなせないならログファイルでも作れ。

#include <stdio.h>
#include <stdarg.h>
void DebugPrintf(const char *fmt, ...)
{
FILE *fp;
va_list ap;
va_start(ap, fmt);
if ((fp = fopen("debug.log", "a")) != NULL)
{
vfprintf(fp, fmt, ap);
fclose(fp);
}
va_end(ap);
}
0535デフォルトの名無しさんNGNG
サンきゅー>>534
0536デフォルトの名無しさんNGNG
autoexec.batに、\essolo.comの一行が
あったから、みならって\doskey.comを
付け加えたが組み込まれない。どうしたらいいかな
0537デフォルトの名無しさん :NGNG
>>533
OutoputDebugStringの出力を受け取るプログラムが動いてないと
だめって事.
MS VC++の IDEを使用しているときは、そこのデバッグ windowに
出力される. 昔は (Win3.1) のころは OutputDebugStringの
出力を windowに表示するプログラムが在ったけど、今はないのかな。
0538538NGNG
MSDNで Debugging Event で検索してみると、OutputDebugString
が発行(?)する OUTPUT_DEBUG_STRING_EVENT のハンドリング方法
がわかる(?) から、調べてみて.
0539デフォルトの名無しさんNGNG
>>533
日本語訳は開発ツールに付属の MSDNでも 同じだよ.
詳細は英語の Documentを読むしかない.
0540デフォルトの名無しさんNGNG
>>538
さっき山本さんのdbgmonてにいれた。memなんとかもmemspyかな。
けど起動順序とかメッセージの組み込みとかあったから現時点では自前で
ダイアログ作ることにした。さんきゅ。
0541デフォルトの名無しさんNGNG
質問攻めの予感がします。当たるかどうかはわかりません。

if(!(hDebug=CreateDialog(hInstG,"DEBUGDLG", hWnd, (DLGPROC)MyDlgProc)))break;
if(!CreateDialog(hInstG, "LISTDLG", hWnd, (DLGPROC)MyDlgProc))break;

おそらく文字列の代入のところなのですが、なんで前者が警告(おそらく不正な代入)
をうけ、後者が受けないのかわかりません。
ちなみに前者はWM_CREATEで、後者はプッシュボタンで発動します。

気が向いたらお気をおかけください
0542デフォルトの名無しさんNGNG
>>541
おそらくとかなんとか言う前にきちっとメッセージを書け。

警告の意味も調べずに聞きに来るやつは、
どっちにしろ途中でプログラミング断念すると思うがな

hDebugの型が HWND じゃないとかそういう落ちだったら
逝ってヨシ
0543デフォルトの名無しさんNGNG
そんな間違いは言語道断だ。
ダイアログはちゃんと出るけど
警告が気になる。>>542
0544Delあめ猫にゃNGNG
ええと、
 if 文 の中で 代入つまり=を使ってるから

(おそらく不正な代入) という警告が出たという話ではないのかな?
0545デフォルトの名無しさんNGNG
なるほどぉ、
でも
MessageBox(hWnd,(LPTSTR)szMyTex, "警こく", MB_OK);exit(0);break;
これも同じなんだよなぁ。漢字が悪いのかと思ったけど
それもちがうらしい・・・・
0546デフォルトの名無しさんNGNG
すまん、↑はifつかってなかった。
けど、これは問題ない。

if(IDYES==MessageBoxEx(hMyEdit,"文章が変更されています。\r\n取りやめますか?","注意",MB_YESNO|MB_ICONWARNING|MB_TOPMOST,LANG_FRENCH))

あれ?うーんぅぅ
0547デフォルトの名無しさんNGNG
すまん、これもちがうな。(藁

っていうかさんきゅ。
けど漏れの教科書(新版応用C言語)どーりなんだけどな・・・・
0548デフォルトの名無しさんNGNG
もう一人質問屋がいるが俺じゃねーからな。。。
多分漏れのが上だ(なにが?)
0549デフォルトの名無しさんNGNG
質問が一発で終わらなかったらせめて番号付けてくれ。わけわからん。
0550デフォルトの名無しさんNGNG
警告の事に関しては漏れは進歩しました。
LPTSTRやLPCTSTRがらみでないことが原因
だと分かってよかったです(解決っぽい)

あとはautoexec.batにc:\doskey.comを
付け加えても反映されないことです。

・・・これからLISTBOXの関連づけの勉強さ・・・
0551名無しさん@お腹いっぱいNGNG
質問ですが、他のアプリのツールバーのハンドルがあるとき、
Win32APIでそのツールバーに属するボタンのハンドルを得たい
のですが、どうしたらいいのでしょうか
0552デフォルトの名無しさんNGNG
ツールバーのハンドルってなんだ?
0553デフォルトの名無しさんNGNG
>>552
ツールバーのHWNDだろ。
0554デフォルトの名無しさんNGNG
ツールバーをspyで見ても、子ウィンドウらしきものは発見できず。
ひょっとしてツールバーのボタンにハンドルって存在しないんじゃ。。。
0555デフォルトの名無しさんNGNG
doskeyってのはc:\にあったりするのかい?
うちのWin95ではc:\windows\command\にあるんだがね。
0556デフォルトの名無しさんNGNG
標準でコントロールが用意されていなかったときは bitmap貼り付けて、
マウス座標でどのボタンの上にいるかはんべつしていた。
0557デフォルトの名無しさんNGNG
ネタ違いだったら悪いけど、ボタンは押されたときWPARAMかLPARAmに(HMENU)ID_BOTTONとか
で指定したID_BOTTONが送られてくるYO。だからif(LOorHIWORD(lorwParam)==ID_BOTTON)
とかでいけるYO
0558デフォルトの名無しさんNGNG
CreateProcessの cmdline 引数が LPTSTR なのは誰かの陰謀ですか。
0559デフォルトの名無しさんNGNG
>>537
DebugViewがあります。
www.sysinternals.comだと思います。
0560デフォルトの名無しさんNGNG
ぶった切ってコマンドラインパラメータに使う可能性を言っているんだと思うが
やはり陰謀です
0561デフォルトの名無しさんNGNG
doskeyの人へ。

やっとよ、うまく逝った!さんくす
0562デフォルトの名無しさんNGNG
指定したWEBサーバー上にある指定したフォルダ階層にある
データをそのままローカルにコピーする処理を作りたいのですが、
フォルダから、階層をくぐって、ほかのデータをシークしていく
方法がわかりません。
よい方法、ルーチンなどがあれば、ご教授ください
0563デフォルトの名無しさんNGNG
>>562
nimdaをインストールすれば一発。
0564デフォルトの名無しさんNGNG
>>558,>>560
この問答についてけない厨房に福音をさずけてください。
子プロセスがGetCommandLineで取得したLPTSTRに適当に'\0'を入れてぶった切ると、
それは親プロセスのCreateProcessのcmdline引数をいじってるということですか。
そんな邪悪なこと許されるはずないので、きっと間違ってるとは思うんですが。
0565sageNGNG
>>564
実際に確認していないが、
strtokの用にパラーメタで渡された文字列を加工して
利用するAPIがあってもおかしくはないだろう。

まあ、落ち着いて考えてみればわかるが、
子プロセスがパラメータで渡された領域を見ることは、あり得ない。
親プロセスのメモリを直接子がいじることはないからね。

しかし、子プロセスを生成してパラメータを渡すAPIが、
コマンドライン引数を解析する際によけいなメモリコピーの
ための手間と領域を省くことがあってもおかしくはないと思う。

今のrichなwin32環境では考えられないことだが、
win16の頃はその程度のリソースも惜しかったんだよ。
0566デフォルトの名無しさんNGNG
>>565
同意
LPTSTRに無理矢理キャストするクソコードとクソサンプルが多すぎて
実際に受け取った文字列を内部で分解しないように
わざわざOS直した可能性ありだね。
0567564NGNG
>>565
ありがとうございます。
落ち着いて考えたらそのとおりなので安心しました。
ちなみにパラメータが単一のコマンドラインとして渡されること自体は
きらいではありません。それに慣れてしまっただけともいいますが。
0568デフォルトの名無しさんNGNG
char pFuncName[32][64]
は、

char **pFuncNameAry;int i;

pFuncName=(char **)malloc(64*sizeof(char *));
for(i=0;i<64;i++)
pFuncNameAry[i]=(char *)malloc(32);

こんな感じ?けど最初*pFuncNameAry[i]=(char *)malloc(32);
って漏れは書いたんだけど、*pFuncNameAry[i]にはどんな意味が
あるの?各文字列の最初の文字って感じかな・・・
0569デフォルトの名無しさんNGNG
>568
1次元目と2次元目が逆になってない?
char pFuncName[32][64]
は長さ64の文字列が32個あるって考えるのが普通
mallocで書き換えるなら
char **pFuncNameAry;int i;
pFuncName=(char **)malloc(32*sizeof(char *));
for(i=0;i<32;i++)
pFuncNameAry[i]=(char *)malloc(64);

*pFuncNameAry[i]はpFuncNameAry[i][0]と値は同じ
0570デフォルトの名無しさんNGNG
ちなみに、 ランタイムライブラリのヒープ (malloc)と、LocalHeap
と、VirtualAlloc をどういう基準で使い分けている?

おれ、 Cで WIN32 つかってるときは、 malloc つかわんけど。
0571デフォルトの名無しさんNGNG
>>570
ローカルヒープ (LocalAlloc, LocalFree で操作するヒープ) は Win16 の名残だから、もう忘れた方が
いいと思われ。

私は基本的に malloc() や operator ::new() を使って、巨大なメモリブロックを一括して確保するとき
や、物理メモリの裏づけが必要なときだけプライベートヒープ (HeapCreate, HeapAlloc) を使ってま
す。VC6 だと malloc(), new() を使っておけば _CrtDbgFlag() と組み合わせてエラーチェックもでき
ますし。
0572デフォルトの名無しさんNGNG
>>571
new()はツッコミどころ?
0573デフォルトの名無しさんNGNG
>>571
そんなことはないと思うぞ。(→もう忘れた方がいいと思われ)
0574デフォルトの名無しさんNGNG
>>573
Win32 だと GlobalAlloc, LocalAlloc は、プロセスヒープから HeapAlloc するのと最終的には
同じ、ただし引数が違うから辻褄が合うように内部で細工してるだけだと思ったが。
0575デフォルトの名無しさんNGNG
なるほどぉ〜、
えーっとやりたかったのは長さ32のを64個
確保したかったってことなので、えーっと、?
あぁ、char **pFuncNameAry[64][32](←これが正解で、)
が逆でした。。
0576デフォルトの名無しさんNGNG
マルチラインのエディットボックスに文字を追加していきたいのですが、
どうすればいいのでしょうか?
ログを表示するために使いたいんです。
0577WIN32APINGNG
>>576
EM_SETSELかEM_EXSETSELで開始と終了にそれぞれ(DWORD)(-1)を
入れてテキストの末端を選択後、EM_REPLACESELでテキストを置き換
えれば実質的に挿入として働く。

MSのサポート情報に載ってたはずなので探して見るべし。
0578あのねーNGNG
VC++のリソースエディタで、コンボボックス作って、
プロパティーのデータタブから初期値を入れると、
ダイアログのテスト時はドロップダウンリストボックスに
表示されるのに、実行すると表示されないのはなぜ???
0579デフォルトの名無しさんNGNG
577は漏れじゃないよ。

int dwPosAry[258]
↓したの関数の代入
int MyFindStringAll(HWND hEdit,LPTSTR Starget,int *dwPosAry)

関数内に引数をして持ち込まれたdwPosAryに「宣言で」割り当てた要素の数、
を求めるのに
j=sizeof(dwPosAry)/sizeof(int *)とかやってみたんですけど、
j==1みたいなんですけど、256を期待してるんですけど、やっぱ
argcを使った方がいいんすかなぁ・・
0580デフォルトの名無しさんNGNG
訂正↑↑

「したの関数”へ”代入」
0581デフォルトの名無しさんNGNG
>579
そりゃそうでしょ。
sizeof(int *)/sizeof(int *)は1だからねぇ。根本的な勘違いをしてると
思われ。
0582570NGNG
>>574
そのとおりです.

>>571
LocalHeapと書いたのが誤解を招いたようだ. 言いたかったのはプロセスが出来た
ときに最初から用意されている Heapのこと。GetProcessHeap()で取得できる
heapね。

詳しくは MSDNを Heap: Pleasures and Pains で検索してみて.
0583551NGNG
>>554
うーん、ボタンに見えるけどあれはツールバーが自分で描いてる
絵にすぎないんでしょうかねぇ。
0584554NGNG
>>583
556の人が昔はそうだったって書いてるし。
きっと今もただの絵だと思うですです。。。
0585デフォルトの名無しさんNGNG
全検索ルーチンでとある用があって、
int dwPosAry[256]
のdwPosAryをdwPos[k]=0xffffffff
としてやったらなんだか動きがおかしいので
intの意味を思い出して0x0fffffff
にした僕は偉いですか?
0586デフォルトの名無しさんNGNG
>>585
すげーちょっとだけエライ
0587デフォルトの名無しさんNGNG
>>585
int なのに dw というプリフィクスなのは罠?
0588デフォルトの名無しさんNGNG
うん、罠っぽい。
DWORDってunsignedだっけ?
なるべく基本形でいこうかな、とも思ってさ。
どっちがいいのか今んとこわかんない。
0589デフォルトの名無しさんNGNG
typedef size_t pos_t
0590デフォルトの名無しさんNGNG
WIN32初心者です。
CreateWindow()の(メニュー)コールバック中でCreateDialog()して、
そのダイアログ内のボタンのコールバックからGetOpenFileName()を呼んでいるのですが、
GetOpenFileName()のウィンドウがファイルに対するダブルクリック以外固まって
しまっているのですが、何が悪いのか解りません。
詳しい方、原因をご指摘いただけないでしょうか。
0591デフォルトの名無しさんNGNG
>>590
「(メニュー)コールバック」って、なに?
「ボタンのコールバック」って、なに?

言ってることが全くわからん。

もしかして、スレ違いか?

MFCスレ、逝ってヨシ。
http://piza2.2ch.net/test/read.cgi/tech/989902845/l50
0592デフォルトの名無しさんNGNG
>>591
MFCのつもりはないんですが...。
言葉の定義が解らないモノで...すみません。

コールバック = WNDCLASSEX.lpfnWndProc=WndProc; とした時のWndProc()の呼び出しです。
で、このWndProc()中で
CreateDialog(hInst, "MY_DIALOG", hWnd, (DLGPROC)DlgProc);
を実行して、DlgProc()の呼び出し内でGetOpenFileName()を行ってるということです...。
0593デフォルトの名無しさんNGNG
>>592
CreateDialogはどのタイミングで呼んでるんだ。
0594デフォルトの名無しさんNGNG
メッセージの処理ははいってます?

略
switch (msg){
case WM_COMMAND
 処理
略
}

ウィンドウプロシージャに入ってきたらいきなり呼んでない
ですよね....
MSDNのサンプルを CreateDialogで検索してみたら。

あと、windowsx.h のメッセージクラッカー使用すると、
すっきりするよ。
0595デフォルトの名無しさんNGNG
>>593-594
呼び出しタイミングはこんな感じです。

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM ){
switch( iMessage ){
case WM_COMMAND:
switch(LOWORD(wParam)){
:
case ID_hoge: ←リソースでメニューに割り付けたID
hDlgWnd = CreateDialog(hInst, "MY_DIALOG", hWnd, (DLGPROC)Proc);
:
break;
}
}
0596デフォルトの名無しさんNGNG
>>595
そうじゃなくって、メッセージポンプをちゃんとまわしてないんだろ?
0597595NGNG
え?メッセージポンプて何ですか?
0598デフォルトの名無しさんNGNG
>>597
で、ダイアログプロシージャのWM_INITDIALOGとかWM_CREATEとかで
何をやってる?
0599597NGNG
う、特に何もしてないというか
default:で
return DefWindowProc( hDlgWnd, iMessage, wParam, lParam );
としてますが...

ひょっとしてここで何かを...?
0600デフォルトの名無しさんNGNG
>>599
ダイアログプロシージャで DefWindowProc() 呼び出しちゃダメだって。

ダイアログプロシージャでメッセージを処理しない場合には FALSE を返す。これで自動的に
DefDlgProc() が呼ばれて、既定のメッセージ処理が行われます。
0601デフォルトの名無しさんNGNG
WinMain() で

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

こういうループあるはず。
これをメッセージポンプといいまふ。

ここでモードレスダイアログに対応しているか。

MSDN で、Creating a Message Loop でけんさくしてみてください。
0602590NGNG
>>591-601
皆さんお忙しい中ありがとうございました。
もちっと勉強してからまた質問させていただきます。
0603590NGNG
追申
なお、>>600氏に指摘いただいた部分が原因でした。
重ねて御礼しますです。
0604デフォルトの名無しさんNGNG
質問。

CreateFileMapping -> MapViewOfFileで取得したポインターを
WriteFileの 2番目の引数に指定して、OVERLAPPED構造体あり
で書きに行く。

6MB位のファイルでテストすると問題ないのだが、
250MBのファイルでテストしたら リソースたりないエラーになる。

IsBadReadPtrで MapViewOfFileで取得したポインターをチェックする
限りではエラーにならない。

どういうことだ。
0605604NGNG
ちなみに OVERLAPPED I/O をやめると、書き込める。
0606DirectDrawCreateNGNG
>>604
> どういうことだ。
横柄な質問態度では誰も答えないものと思われ :-p
知ってるけど答えない :-p
0607デフォルトの名無しさんNGNG
>>604
MMFにOVERLAPPED I/O を使うのは何か理由が?
0608604NGNG
>>606
知っているのなら教えてください。

>>607
二つの処理を書いてます。
1.MMFをくるむ処理。(MMF知らない人に使わせる。)
2.メモリ中に作ったデータを 非同期WriteFile するしょり。(1同、知らない人に使わせる。)

この二つを同時にテストしてた。

Overlappedだけに限定します。

6MBのバッファを作成。
WriteFile() で、OVERLAPPED I/O 書き込み -> OK

250MBのバッファを作成。
WriteFile() で、OVERLAPPED I/O 書き込み -> NG
0609デフォルトの名無しさんNGNG
>>608
まさかメモリ 256MB とかのマシンじゃないだろうな。

すべてのページをコミットできるだけのメモリを買いに逝け。
0610604NGNG
>>604 で書いているように、IsBadReadPtrで MapViewOfFileで取得したポインター
をチェックす>限りではエラーにならない。

このAPI呼び出しに行くとやたら時間がかかり、正常終了する.
タスクマネージャーで見ると、メモリ消費している.

>>605 で書いているように、OVERLAPPED I/Oにしないと書き込める.
0611デフォルトの名無しさんNGNG
CでOLEを使って、Excelを操作したいのですが、
簡単な方法はありませんか?
処理系はVisualCですが、MFCは使いたくありません。
0612デフォルトの名無しさんNGNG
>>611
MS製品でやるならVBにしとけ
俺は最近BCBでやったけど、結構死ぬぞ。
しかも、ここはWin32 APIのスレだ。
Excel操作出来るAPIなんてきいたことねー。
0613名無し言語NGNG
>>611
COM(Component Object Model)使うしか術がないが、MFC不可となるとさすがに無理(内部的にMFCを使わないとものすごく面倒)だなぁ。
Excelでどこまで操作したいのか解らないけど、Windows Scripting Host (VBscript or Jscript)でも操作できるので調べてみそ。
0614デフォルトの名無しさんNGNG
>>608
OVERLAPPED I/O を使たからには、WriteFile()は
ERROR_IO_PENDING を返すと思うが、
その後に、GetOverlappedResult() とかの処理をやってる?
0615デフォルトの名無しさんNGNG
>>613
っつーか、言語がCって時点でMFCは使えないと思うが。CからCOM
オブジェクトを呼ぶ、となると一筋縄ではいかんでしょう。

C++なら#importでタイプライブラリを取り込めば、なんとかなるかな。
でもやっぱりCOMオブジェクトを操作するならまずVB、次にDelphiじゃ
ないですかね。
0616デフォルトの名無しさんNGNG
これからお世話になりそう...よろしく
0617名無し言語NGNG
>>615
うん、そだね。Cという縛りを考えるとMFC不可になっちゃうね。

あと、CからのCOM呼び出しはそんなに難しくないよ。
MFCを使わずにC++でCOM使う方が難しいと思う。
DirectXあたりで勉強しとくと良いよん。
(DirectXをCOM経由でCから呼び出すサンプルがあるので)

あと>>611へのレスだけど、OLEを使うくらいならCOMに合わせた
ほうが良いと思う。今から勉強するならより新しい技術で、って意味ね。
0618615NGNG
>あと、CからのCOM呼び出しはそんなに難しくないよ。

Excelのインタフェースって公開されてましたっけ?インタフェースが
わからないと自力で解析しないといけないですよね。IDispatchから
呼ぶにしても簡単にできますかね。Inside OLE2にはCとC++のサン
プルが載っていたけど、Inside COMでも載ってますかね。

>あと>>611へのレスだけど、OLEを使うくらいならCOMに合わせた
ほうが良いと思う。今から勉強するならより新しい技術で、って意味ね。

Excelを呼び出すレベルならOLE=COMだと思いますが。元々名前を
変えただけのものだし。
0619デフォルトの名無しさん NGNG
>>614
ええ、書き込みで使用するバッファが 小さいと問題無く動作してます.
ただ 技術情報 J047165 にかかれているように、ほぼ同期I/Oに見え
ます。

いま、いろいろと情報収集中です.なにか気になることがあれば
教えてください.


いま考えているのが、大きいバッファを渡されたときは I/O完了
ポート作って、分割して一気に書きに行こうかと思ってます.
しかしながらWriteFile()でリソースエラーとなる指針がかかれて
いないので躊躇してます.
0620名無し言語NGNG
>>618
Excelを含めて、全てのOffice製品のインターフェイス仕様は
VBAと全く同一(つーかVBAもCOMを使って実装してるだけなんだが)。

呼び出しのやり方が言語によって違うけど、与えるパラメータとか
返ってくる値とかはVBAのヘルプが役立つ。
0621615NGNG
>>618
もちろんそれはそうなんですが、引数の型がVariantだらけだったり、
VB(A)では省略可能な引数も全部指定しなければならなかったり、
いろいろ大変です。それとカスタムインタフェースを呼び出すには
IIDも必要ですよね。IDispatch経由で呼び出すのなら不要ですが。
0622デフォルトの名無しさんNGNG
WindowsAPIのプログラムで質問ですが、よくボタンを押しぱなっしにしていると
表示されている数値が増加したり減少したりするのがありますが、どうすれば
実現できるのでしょうか?

今、やってみたのは、ボタンをサブクラス化して、WM_LBUTTONDOWNメッセージを
検出したときに、タイマーをセットし、WM_TIMERメッセージを送り、そこで数値の増加
をおこない、WM_LBUTTONUPでタイマーを解除する、ってのを、してみたのですが、
ボタンを押した状態で、ボタンからカーソルをはずしボタンを離すと、数値の増加が
とまらない状況になります。

よい実現方法はないでしょうか?

   ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       .∩∧,,∧           (´´
     ,,,,,,,,,,ミ゚Д゚,,彡        (´⌒(´
   ど,,,,      ,,,,,二⊃≡≡(´⌒;;;≡≡≡
      ~''(,,,,,づ゙゙  (´⌒(´⌒;;
    ズザーーーーーッ!!
0623デフォルトの名無しさんNGNG
>>622
SetCapture
0624デフォルトの名無しさんNGNG
>>623

おおっ、一発で解決しました。
ありがとう。
  ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄
      ∧,,∧          (´´
   \,,,,ミ,,゚Д゚彡      (´⌒(´
  ⊂,,,,,,,,,つつ.≡≡≡(´⌒;;;≡≡≡
           (´⌒(´⌒;;
      ズザーーーーーッ
0625デフォルトの名無しさん NGNG
あえて質問しますが何故MFCを使わないのですか?
0626デフォルトの名無しさんNGNG
>>625
MFC使うと、MFC42.dllが必要。バージョンの違いが死を招く
STATIC Link すればいいが、*.exe がデカくなるのがイヤ(w
0627デフォルトの名無しさん NGNG
>>626
そんなにサイズデカくなりますかねぇ・・・
あ、わたしもスタティックリンクでしか使いませんけどね
0628デフォルトの名無しさんNGNG
>>626
Win95のファーストリリースで使う予定でもあるのか?
現行のWindowsには必ず含まれてるど<MFC42.DLL
0629名無し募集中。。。NGNG
>>628
>>626はDLLのバージョン違いが恐いといってるんじゃないの?
0630協力しよう!NGNG
くそガキ共の情報お待ちしております。
世間を震撼させた事件の犯人を実名で公開しております。
http://topia.yam.com/home/aoiryuyu/pages/index.html
0631デフォルトの名無しさんNGNG
APIオンリーでリッチコントロールの
ウィンドウテキスト取得で、64KBの
壁にぶち当たったけどどう回避したらいいかな。
0632デフォルトの名無しさんNGNG
ちなみにEM_STREAM**をつかわず頑固に
writefileとかgetwindowtextつかってる。
0633デフォルトの名無しさんNGNG
1)GetWindowText()
2)Edit_GetText()
3)SendMessage(hEdit,WM_GETTEXT,(WPARAM)nlen,...)

3番目のみ64kb以上に対応。

1、2でも引数のキャストが原因の可能性があったけど、
両方ともintなのでおそらく違う。

これについて語ろう
0634デフォルトの名無しさんNGNG
厨房じゃないから安心して話そうゼ
0635626だがNGNG
漏れは未だにVC5.0++を使っている(ワラ
これのMFC42はバージョン4.21だ。最近は6.00以降だからな。
4.21を前提として作ったアプリが6.00のもとでチャンと動かなかったことがある。
0636デフォルトの名無しさんNGNG
書き込み禁止属性のファイルを強引にfopenで開いて書き変えたいのですが
属性変更のAPIなんかあるのでしょうか?NTだと書き込み権限とかあると思
いますが可能な限り書き換えたいのです。
0637デフォルトの名無しさんNGNG
>>636
SetFileAttributes("ファイル名", GetFileAttributes("ファイル名") & ~FILE_ATTRIBUTE_READONLY);
実際にはエラーチェック等を入れて。
0638デフォルトの名無しさんNGNG
COMっていったい何ができるの(でやんすかね?)

例えばAPIだったらWindowが作れる、MFCは、その細かい操作が
できる、とか。COMってなに?
0639デフォルトの名無しさんNGNG
direct x も com だぴょん.

・com作って、別なマシンからそいつを呼んだり出来る.com+
・自分でプログラム作るときに一部を comにしておいて、インターフェイスを
公開すれば他のプログラムから使用できる。オートメーション
・インターフェイスの仕様がバイナリフォーマットで定義されているので
C++で作っても、Cで作っても、VBでつくっても相互に呼び出せる.
ただし、VBをサポートする場合はIDispatchインターフェイスを書く必要がある.

そのたいろいろ。

でもレジストリの管理が煩雑でいやになっちゃうから 早く .NET が普及
してほしいね!
0640デフォルトの名無しさんNGNG
>>638
とりあえず『Rubyを256倍使うための本 邪道編』を勧める。

まぁ、代表的なCOMの用法というとIEコンポーネントのブラウザとか
かちゅーしゃとか、その辺かな。
0641デフォルトの名無しさんNGNG
DLLもまだ使ったことないけど
、、、なんだか似てるな
0642デフォルトの名無しさんNGNG
コンピュータにやさしいプログラムを書いているので、
文字配列の長さを16の倍数で書くことが多いです。

ヌル文字入れて10文字しか必要なくても、16って書きます。

でもこれはもしかすると32とかの方がよりやさしいといえますか?
それとも64取りますか?皆さんはどうしてますか?
0643デフォルトの名無しさんNGNG
通は111とか222とか取る。
0644デフォルトの名無しさんNGNG
>>642
意味がワカラン。
配列サイズなんか定数で指定しないもんよ。
0645デフォルトの名無しさんNGNG
理由が全然わかりません。特に理由はなく無意味とかですか、、?>>643
0646デフォルトの名無しさんNGNG
コンピュータ内部では16の倍数で管理や制御を行う
システムがあるのではないかと考えたからです。。>>644
0647デフォルトの名無しさんNGNG
うーーーー厨房の変てこなレスをどうにかして欲しい・・・・
0648デフォルトの名無しさんNGNG
>>646
アセンブラならともかくCでは無意味。
コンパイラが自動的にコンピュータにやさしくなるようにしてくれる。
0649デフォルトの名無しさんNGNG
コンパイラのミス処理(まぁ、ないのかなぁ)とか、
負担とかを考えて自動化になるたけ頼らないように
心がける意味は、ありますか??
0650デフォルトの名無しさんNGNG
>>637

ありがとうございます

書き込み禁止のファイルを書き込み可能にするにはこんな感じで
いいですよね?

// 書き込み禁止なら
if ( GetFileAttributes( file ) & FILE_ATTRIBUTE_READONLY ){
// 書き込めるようにします
if ( SetFileAttributes( file, FILE_ATTRIBUTE_NORMAL ) == 0){
// エラー処理
}
}
0651デフォルトの名無しさんNGNG
ふーーーーやっとみつけた!こーぴぺ!

132 :デフォルトの名無しさん :01/10/22 22:01
"."や"->"はものすごく優先度が高い演算子で、ほとんど「名前の一部」とみなしていいほど。
・・・と、最初は思ってればいいよん。
bMfh.bfType[0] = 'B';
strncpy(bMfh.bfType, "BM", 2);

>bfTypeがchar[2]か[3]かわかんないので、
これは問題あると思うが。


141 :デフォルトの名無しさん :01/10/22 22:33
構造体あれこれ。

bf.bfType = MAKEWORD('B','M');
stBmpFileHeader.bfType = 0x4d42
bmHead.bfType = ('B' | ((WORD)'M' < < 8))
memcpy(&fh.bfType,"BM",2);
bmFileHead.bfType = 19778;
BmpFileHeader.bfType = 'MB'

char bfType[2];
146 :デフォルトの名無しさん :01/10/22 23:30
正解は、
bf.bfType = MAKEWORD('M', 'B');

以下略・・・・・・・・・・・・・

>>http://piza2.2ch.net/test/read.cgi/tech/1003418249/101-200
参考にして下さい。
0652637NGNG
>>650
だいたいそんな感じだと思うけど、GetFileAttributes()は失敗すると
-1(==0xffffffff)を返すので、それだとマズいのでは。
0653637NGNG
あと、フラグによっては副作用が出ることがあるので、必要なフラグのみ
セットするか処理後にフラグを書き戻すかした方がいいと思います。
0654デフォルトの名無しさんNGNG
質問です、
FTPソフトと同じように、指定したURL上(HTTP)の
ディレクトリ&ファイル表示をしたいのですが、これらのディレクトリ
情報を取得する方法ってありますか?
教えてください
0655デフォルトの名無しさんNGNG
せんせー
hdc = GetDC(hList);
SetTextColor(hdc,RGB(0,0,0));
SetBkColor(hdc,RGB(0,0,10));
SendMessage(hWnd,WM_CTLCOLORLISTBOX,(DWORD)hdc,(DWORD)hList);
ReleaseDC(hList,hdc);
で、リストボックスの描画色と背景色を変更したいのですが変わりません。
どーしたら良いのでしょう?
0656デフォルトの名無しさんNGNG
HTTPを実装すればいいんでない。
0657デフォルトの名無しさんNGNG
>>655
hWndはリストボックスの直接の親か?
つか、WM_CTLCOLOR〜って、親に送るんじゃなくて親がシステムから
受けるためにあるんだけど。
親がそのメッセージを受け取ってブラシハンドルを返すのが正しい。
あと、このメッセージはスレッドをまたがない。
0658655NGNG
はい、直接の親です。
うー、そうなんですか。
どうしたら色変更できますか?
SetSysColors使ったら全部のウィンドウの色が変わっちゃうし。
0659デフォルトの名無しさんNGNG
>>658
よく読め。親でWM_CTLCOLOR〜のハンドラを実装する。
で、渡されたDCに適切なコンテキストを設定して、背景色にする
ブラシのハンドルを返す。
ていうかMSDNに書いてあるよ。
0660658NGNG
>>659
ごめんなさい。
MSDN英語で今一良く解らず。
一応
case WM_CTLCOLORLISTBOX:
hdc =(HDC)wP;
SetTextColor(hdc,RGB(10,20,255));
SetBkColor(hdc,RGB(100,20,20));
hBrush = GetStockObject(GRAY_BRUSH);
return (WORD)hBrush;
break;
と書いて出来ました。これで良いでしょうか。
0661660NGNG
あー、ありがとうございますって言ってないし。
>>657,659
ありがとうございました。
0662デフォルトの名無しさんNGNG
あるプログラムを親プロセスから呼ばれないと起動しないようにできるでしょうか?
単体でエクスプローラからダブルクリックで起動しないのだけれどもある親プロセス
から呼ばれると問題なく動くようなものを作りたいのです。
0663デフォルトの名無しさんNGNG
>>662
拡張子をexe以外にリネームしとく。って邪道?
0664デフォルトの名無しさんNGNG
>>662
ある特定の引数を渡さないとすぐに終了させるようにする。
シェアウエアソフトなどのプロテクトみたいな考え。
これも邪道かな。
0665デフォルトの名無しさんNGNG
>>662
親プロセスが子プロセスをまずサスペンドで起動する。

子プロセスのプロセス ID を使って、
親と子だけが知っているような名前付きのイベントや共有メモリなどの名前を生成したあと、
子プロセスをレジュームする。

実行を開始した子プロセスは、自分のプロセス ID を元にして先の名前をオープンし、
もしオープンできたら、親プロセスから呼ばれたとわかる。

もしオープンできなければ、赤の他人から起動されたとわかる。
0666デフォルトの名無しさんNGNG
基礎的かもしれませんが・・・。マウスのボタンが押されているかどうかは
どうやって調べるのでしょうか?
0667デフォルトの名無しさんNGNG
>>666
WM_{L|M|R}BUTTON{DOWN|UP}をハンドルして状態を保存するか、GetKeyStateを使う。
0668デフォルトの名無しさんNGNG
>662
プログラムをexeではなくdllで作れば。
0669デフォルトの名無しさん NGNG
厨房な質問させて下さい。
APIとシステムコールって何がどう違うのですか?
Winのプログラムを勉強し始めたら、やたらとAPIという
単語が出てきます。Linuxでやってた時はAPIという単語
は出てこなかったのですが。。。
0670デフォルトの名無しさんNGNG
>>669
両者の正しい定義は知らないんですが、ニュアンスとしては、
システムコールは、OSに依頼せざるを得ない処理、ハード直結操作とか。
APIは、システムコール+各種のライブラリ、の総称。
という感じではないでしょうか。
0671デフォルトの名無しさんNGNG
>>669
OS が直接提供するサービスを呼び出す、具体的にはソフトウェア割り込みなどを使って特権モード
で動いているカーネルプロセスに制御を移すのがシステムコールで、それ以外はすべてライブラリ
関数。

UNIX ではシステムコールがすべて公開されていますが、Win32 ではシステムコールは原則として
非公開で、アプリケーションプログラマが直接呼び出すのは禁止されています。で、代わりにシステ
ムコールを内部で呼び出す(呼び出さないものもあるライブラリ関数が標準化され公開されており、
この公開インターフェースを Win32 API と呼称しています。
0672デフォルトの名無しさんNGNG
インストール中に二枚目のCDを入れると二枚目のCDROMのautorun.exeが起動してしまいます。
インストーラーが裏で動いているときだけ起動しないようにするにはどうすればいいでしょうか?
0673デフォルトの名無しさんNGNG
>>672 2枚目の autorun.exe でインストーラを検出
0674デフォルトの名無しさんNGNG
>673

どのようにすればインストーラを検出できるのでしょうか?
0675デフォルトの名無しさんNGNG
>>674 & >672
Mutex作るなり、FindWindowするなりでインストーラプログラムを見つけろ。
0676669NGNG
>>670
>>671
レスありがとうございます。おかげで理解できました。
0677デフォルトの名無しさんNGNG
データが1万件程あるせいかListView_DeleteAllItems()での削除が
遅いんですけど、多少でも速くなる方法はなんかあります?
(追加もまぁ遅いけどそっちは何故かあまり気にならない^^;)
0678677NGNG
誤sage age
0679デフォルトの名無しさんNGNG
.NETが正式に採用されるとWin32APIは無くなるの?
今まで必死に覚えたのが無駄になる?
0680 NGNG
>>677
仮想リストビュー使え。
0681680NGNG
>>677
おお、なるほどこんないーもんがあったのか。
ありがと。
0682デフォルトの名無しさんNGNG
常にとあるWindowの前には出したいが
最前面はいやだっていう我侭に答えてくれるAPIってなんですか?
0683デフォルトの名無しさんNGNG
うぃんさんにーあぴ。
0684デフォルトの名無しさんNGNG
>>682
そのとあるWindowの子ウィンドウとしてモードレスダイアログにすれば良し。
0685デフォルトの名無しさんNGNG
rewindだっけなぁ〜どうもわからんちん・・・・教えて
0686デフォルトの名無しさんNGNG
あげろーーーーーーーーーーーーー
0687デフォルトの名無しさんNGNG
謹んで質問させて欲しいのですが、、

POINT pt:
......
ptは、LBBUTTONUPの際の座標です。

hTarget=WindowFromPoint(pt);
hTargetChild=ChildWindowFromPoint(pt);

です。これで、MyDocumentのフォルダーの、キャプションを調べてみたものです。
やると、
hTarget:16進 ba8,10進 2984
hTargetChild:16進 ca8,10進 3240
(ちなみに、hTarget→ClassName:[CabinetWClass],
hTargetChild→ClassName:[SHELLDLL_DefView],)
なる結果となります。

hTargetChildが、まさに、キャプションのハンドルで、
   hTargetは、それが直接属するところの、親ウィンドウハンドル、
という解釈でいいのでしょうか?混乱しています。

マウスで選んだ対象が、子ウィンドウである場合は、ハンドルはhTargetChildであり、、
親ウィンドウである場合は、ハンドルはhTarget、、である。と考えればいいのかなぁ、


意味不明なので参考まで。↓
(しばしばhTargetChildは、0を返す場合があります。。このとき
このことを、「これは親ウィンドウだ」と、、理解、、している、、のですが。。
↑
あぁ、鬱だ。。
0688デフォルトの名無しさんNGNG
>>687
あぁ、鬱だは撤回させてください。。
0689デフォルトの名無しさんNGNG
CreateFileMappingはメモリ共有以外で何に使えるのでしょうか?
これで巨大なメモリブロックを予約して、
テンポラリファイルみたいに使えるのですか?
0690SpyNGNG
他のアプリで表示されてるテキスト文字列を取得するAPIは何でしたっけ?
0691デフォルトの名無しさんNGNG
>>689

どっちかっていうとメモリ共有よりも
高速なファイルの読み書きに使うものでは?
Win98以降の場合、VCacheの中身が直接マッピングされるので、
読み書きとも無駄なメモリ間移動がなくなるので、
高速に(かつ省メモリで)動作させられる。

当然、共有モードで開いたファイルには使えないんだけどね。。。
0692デフォルトの名無しさんNGNG
VCache と MapCache
http://home.impress.co.jp/magazine/dosvpr/q-a/9912/qa9912_3.htm

ファイルマッピングオブジェクトとは関係無さそうですが・・・。
0693デフォルトの名無しさんNGNG
>>690
何のテキストだ。
EditコントロールならGetWindowText。
コンソールアプリの標準出力ならパイプとか出力コンソールのハンドルとか。
0694690NGNG
>693
アマ厨房なもので、Editコントロールかどうかちょっとわかりません(汗)。
コピペできない表示データ(1行程度)を現在は手打ちしてますので、
自動で取得できたらなと…。
でも、調べてみたら、GetWindowTextが使えそうなので、やってみます。
ありがとうございました。
0695デフォルトの名無しさんNGNG
>>692

それ、説明悪いね。すべてのファイル入出力がマッピングされるかのように
読み取れなくもない。
たぶん、そこでいっているのは、あくまでもスワップファイルについての話だとおもう。

ファイルマップを使った場合には、
例えばファイルの中身を見てそれを画面に出力するというしょりは、
以下のようになる。

Disk->VCache->Display

たいして、通常のファイルI/O関数を使うと、
一旦アプリケーションのローカルメモリにコピーする処理が必要になる。

Disk->VCache->Buffer->Display

ファイルマッピングでは、VCache上に読み込まれているデータの
アドレスを直に得られるのがポイント。

試しに、適当なバイナリファイルを開いて、
それの中身をバイト単位かなんかで、すべてインクリメントしていくプログラムを書いてみよう。
ファイルマッピングを使ったときと使わなかったときで
処理速度が違うのがわかると思う。
0696デフォルトの名無しさんNGNG
>>693
GetWindowTextはEditコントロールに対してはそのテキスト
の取得だけど、Editコントロールじゃないウィンドウハンドル
に対してはキャプションを返すよね。。
0697689NGNG
Disk->VCache->Display
つまり、MapViewOfFileはVCache内のポインタを返すのですね!

FlushViewOfFileとFlushFileBuffersの速度がかなり違いました。
0698デフォルトの名無しさんNGNG
ちかぢか使いそうなのでage
身勝手でゴメン
0699691==695NGNG
>>697

わかった?
ま、正直あんま使いどころ無いんだけどね。
秒間何MB〜何十MBとか読み書きするようなプログラムでないとほとんど意味ない。
やっぱりマルチメディア系ですかねぇ、使いどころがあるとしたら。
WAVEファイルの読み書きとかAVIファイルの読み書きとかぐらいかも。
0700689NGNG
691さん、ありがとうございます。

テンポラリファイルは ReadFile/WriteFile でやります。
0701デフォルトの名無しさんNGNG
fpStartHook = (PSTARTHOOK)GetProcAddress(hMyLib,"_StartHook");

・・・・・即答でおねがいします。




なぜかというと、dllのソースで,定義は「EXPORT BOOL StartHook()」としてたのです。
(#define EXPORT extern "C" __declspec(dllexport)

どうあってもfpStartHookがNullなので、あまりに不甲斐なく、暇ももてあまして
たのでいん歩ライブなどやってみて、しかも、偶然type hoge.libとすると、
各関数の前にアンダーバー_がついていたので、プログラムにもアンダーバーを
つけたらうまくいきました。どんなところをみてもアンダーバーなんか書いてなかった
ので、意味がわかりません。どうしてうまくいったのですか?
0702デフォルトの名無しさんNGNG
あしたまでに即答だゴルぁ!
0703デフォルトの名無しさんNGNG
自分で読み返してみれば直ぐわかりそうなもんだが…
0704デフォルトの名無しさんNGNG
波動→真昇龍→上段即答蹴り→のっけあうつ
0705デフォルトの名無しさんNGNG
701
どのような参考をみても、
fpStartHook = (PSTARTHOOK)GetProcAddress(hMyLib,"StartHook");
の形式なのに、なぜ、僕は、
fpStartHook = (PSTARTHOOK)GetProcAddress(hMyLib,"_StartHook");
としなければならなかったのか、アンダーバーの重要性がわかりません。
0706デフォルトの名無しさんNGNG
#define EXPORT extern "C" __declspec(dllexport) __stdcall
0707デフォルトの名無しさんNGNG
わかりました。なんとなく調べてみます。>>706
0708デフォルトの名無しさんNGNG
IMEの変換中のフォントを変える方法ありませんか?
エディタコントロールならEM_SETIMECOLORで出来ますが
そうでない場合はどうするんでしょ。
0709デフォルトの名無しさんNGNG
.NETになったらWin32APIは無くなるんですか?
それともずっと使えるんですか?
0710デフォルトの名無しさんNGNG
今もDOS/Win3.1のプログラムが走るってあたりから推測できんかね
0711デフォルトの名無しさんNGNG
.NETってあくまでもラッパーみたいもんじゃないの?
0712デフォルトの名無しさんNGNG
>>712
ImmSet〜で始まるAPIを調べよ。
0713708NGNG
>712
えっと、こんな感じだと思うんですが、
どれも実現できなそうなんです。

ImmSetCandidateWindow...変換候補窓の位置
ImmSetCompositionFont...変換窓のフォント(色は無理)
ImmSetCompositionString...変換文字・情報
ImmSetCompositionWindow...変換窓の位置
ImmSetConversionStatus...変換状態
ImmSetOpenStatus...IMEオープン可否
ImmSetStatusWindowPos...IMEツールバーの位置
0714デフォルトの名無しさんNGNG
>>713
お前、>>708に自分でなんて書いたかもういっぺん読んでみろ。
0715708NGNG
すいません。
EM_SETIMECOLORで通じると思ったんですが、
変換属性ごとのフォント・背景色などを設定したいわけです。
(↑入力、変換中、変換後、選択中といった属性)
0716デフォルトの名無しさんNGNG
レジストリで、たまたま他のアプリが同一パスの同一キーを使う場合、
どうなるのでしょうか?
これを回避する仕組みがWindowsにあるのでしょうか?
0717デフォルトの名無しさんNGNG
なんで「Easy-G」が公開停止になったか考えてみるがよい!
若人(あきら)よ!
0718_NGNG
つまらんおやじが常駐しているな。。。
0719デフォルトの名無しさんNGNG
>>715
できません。

>>716
GUID
0720デフォルトの名無しさんNGNG
ウィンドウを透明化するのにWin2000では、SetLayeredWindowAttributesを
使っていろいろ応用できそうですが、WinMe/98で同様のことをするのは
無理っぽいでしょうか?
またWinXPは、どうなんでしょうか。

ご存知の方、ご教授ください
0721デフォルトの名無しさんNGNG
>>720
XPはOK。
ME/98は自分で描画するほかない。
0722デフォルトの名無しさんNGNG
dllの変数の共有をやるには、#pragmaしかないんですか?ひょっとして
staticとかで、どうにかなりませんか?あぁ、、

#pragma data_segをつかうには.defファイルをつくらないとどうしても
だめですか?無料コンパイラBCC55をつかっているのでプロジェクトに参加
なんていう便利なポップアップは当然ありません。どうすれば、ば、いいどかな。

ちなみにWH_CALLWNDPROCを使っています(フックします、ご注意ください)
0723デフォルトの名無しさんNGNG
>>722
メモリマップトファイル
0724デフォルトの名無しさんNGNG
>>715
できます。
ImmGetCompositionStringで変換中の文字列を取得して、
それぞれの変換属性ごとに自分で勝手に好きな色で画面に書けばおっけー
0725デフォルトの名無しさんNGNG
VC++のデバッグ実行時にカーソル(キャレット?)を変数に当てるとその値を表示してくれますが、
あんな感じのことをリストビューのアイテムに対しても出来るでしょうか?
0726720NGNG
>>721
合成処理は自分で行うつもりなのですが、
下地(デスクトップ)のパターンを取得しつつ
(するだけなら簡単ですが)
そこを、透明度0のウィンドウがあるという仮定が
できればいいのですが。
あ、Win95/98の話です。
0727デフォルトの名無しさんNGNG
>>720
自分の下にあるウインドウを含めたデスクトップのイメージを取得することが出来ないので、
9x/MEでは不可能
0728708NGNG
>724
ありがとうございます。
Wordpadなど見ると、日本語入力中も随時「実際入力されたように」表示されるので、やはりそういう処理なんでしょうね。
そうするとIMEで設定出来るフォント情報はレジストリ辺りから拾えるのかな。調べてみます。
0729724NGNG
>>728
フォントも自分で勝手に好きなフォントで書けばおっけー。
0730デフォルトの名無しさんNGNG
フォントデータをビットマップに変換するのに、いい方法があったら教えてください
0731デフォルトの名無しさんNGNG
>>730
GetGlyphOutline
0732デフォルトの名無しさんNGNG
あるDLLの中でWH_CALLWNDPROCシステムフックをかけると、
そのDLLはすべてのプロセスから共有されていることになりますか?

それと、hFileMapping=CreateFileMapping(...)は
複数個(hFileMapping1,hFileMapping2....というふうに)
使うことはできますか?
0733ゲイ2NGNG
CreateFontIndirect(&lf)
LOGFONT lf;

の使い方教えてください。
0734デフォルトの名無しさんNGNG
>>732
システムフック:なりません。
ファイルマッピング:出来ます。
>>733
LOGFONT のメンバを全部設定して、CreateFontIndirect を呼ぶと、HFONT が得られるので、それをデバイスコンテキストに選択して使います。
0735名無しさんNGNG
>>720
http://www.ksky.ne.jp/~seahorse/libgw/
これは?
0736デフォルトの名無しさんNGNG
>>735
その程度のことなら以前市販ソフトのテキストエディタでやってたね。
LayeredWindowと違って、下のウインドウの再描画が去れない
0737デフォルトの名無しさんNGNG
>708,728
IME未確定・変換文字列の描画は、「IMEが描画を行う場合」と「アプリケーションが描画を行う場合」の2種類ある。
普通ソフトは前者なんだが、WordPadみたいに一部のソフトは後者を採用してる。
このリンクの先に両方のケースのサンプルコードがあるよ。
http://www.justsystem.co.jp/tech/atok/download1.html
0738デフォルトの名無しさんNGNG
>>737
つか、MSOfficeのコンポーネントがそうしてるからでしょ。
コンパネで設定する色はOfficeコンポーネントにしかきかんし。
0739デフォルトの名無しさんNGNG
>>732-734
ウィンドウの無いプロセスはそのDLLをロードしないって事なのですか?
0740デフォルトの名無しさんNGNG
>>739
すべてのプロセスで1つのDLLを共有するのではなく、それぞれのプロセス空間で別々にDLLがロードされます。メモリ空間が異なるのでやっかいな問題になります。
0741739NGNG
おっと、そういう意味でしたか。

WH_CALLWNDPROCはウィンドウが必要なので、ウィンドウの無いプロセスは
そのDLLをロードしないのか?
って質問だと思った・・・。
0742740NGNG
>>740
む。そう取れなくも無い。
0743デフォルトの名無しさんNGNG
732です。
>>740
あ、そうなんです。いろいろやってみて
そんなようなことに気づき混乱したんです。
DLLで定義したint nCountが、それぞれの
プロセス(WH_CALLWNDPROCフックのかかっているすべてのプロセス)
で、独立にカウントされているようだったからです。
それぞれのプロセスが独立にそれぞれ、int nCountを設けている
感じでした。ので、それが困るのでCreteFileMappingを使いましたが、
うまくいかないので思考錯誤中です。

でエラーがでるので、まずはこの部分からみなおしてみました。
hFileMappintの複数設置は可能なのか・・・・と。
(DLL内のフック開始関数内で)
hFileMapping1 = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
PAGE_READWRITE, 0, 4096*64, NULL);
buf=(char *)MapViewOfFile(hFileMapping1, FILE_MAP_ALL_ACCESS, 0, 0, 0);
hFileMapping2 = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
PAGE_READWRITE, 0, 128, NULL);
buf1=(char *)MapViewOfFile(hFileMapping2, FILE_MAP_ALL_ACCESS, 0, 0, 0);*buf=NULL;
hFileMapping3 = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,
PAGE_READWRITE, 0,sizeof(int), NULL);
pnCount=(int *)MapViewOfFile(hFileMapping3, FILE_MAP_ALL_ACCESS, 0, 0, 0);
*pnCount=0;
・・・直後に hHook = SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)MyHookProc, hInst, 0);
これはこれで、いいのかぁと考え中
0744708NGNG
>724
そうですね。IMEの設定と同期しようかと思ったんですが。
>737
ATOKのサンプルなんですね。初見です。ありがとうございます。
>738
なるほど。WordpadがIMEの設定と同期しないんで、自分のアプリもいいかなー思ってたんですが、そういうことなんですね。

皆さん参考になりました。
0745デフォルトの名無しさんNGNG
Mapped File の本来の使い方は、片方のプロセスで、
   a) CreateFileMapping と
     MapViewOfFile
を実行し、もう片方のプロセスで
   b) OpenFileMapping と
     MapViewOfFile

こういうことだと思います。>>743
0746740NGNG
>>743
ファイルマッピングハンドルも、ポインタも、何もかもが、相手のプロセス空間に渡せないので、それだとダメです。
0747デフォルトの名無しさんNGNG
>>745
本来の使い方じゃネーだろ
0748デフォルトの名無しさんNGNG
>743
>>hFileMappintの複数設置は可能なのか・・・・と。
可能だけど、ほかのプロセスから呼びたいなら、それぞれのマッピングオブジェクトに名前をつけないとダメ。
CreateFileMappin()の最後の引数で。
それぞれに一意な名前を付けて、呼び出すときにほかのマッピングオブジェクトと区別するんだよ。
参考↓
http://members.tripod.com/~masapico/api_CreateFileMapping.html
0749デフォルトの名無しさんNGNG
buf=(char *)MapViewOfFile(hMapFile1,
FILE_MAP_ALL_ACCESS, 0, 0, 0);
フックプログラムなんですが、ファイルマップトファイルを使った
あとから問題が起こりました。そのプログラムを初めて起動した場合は
スムーズの実行されるのですが、一度終了して、2度め、3度目、と
回をおう毎に、(そのプログラムの)動作が遅くなっていきます。
というか、フックプログラムなのでフック中はパソ全体が重くなります。
(回をおう毎に)

そこで・・・・
buf=(char *)MapViewOfFile(hMapFile1,
FILE_MAP_ALL_ACCESS, 0, 0, 0);
にstrcatを行っているところに注目したのですが。
bufはサイズ2048*128で、最後のほうまでいったらbufをクリアしています。が。
MapViewOfFileで指定されたこのbufに、*buf=NULLとすると、バッファクリア
になるでしょうか?それともzeromemoryかmemset('\0',sizeof())つかわないと
だめでしょうか、あとは、MapViewofFileは特殊っぽいので、SetFilePointer(File
_BEGIN)とかつかうのかわかりません。

疑問なんですが*buf=NULLてのは、buf[0]='\0'てことなのかなぁ。
0750デフォルトの名無しさんNGNG
>>748おぉ!それはクリアできました。
名前を付けないと・・だめですよね。各プロセスが
判別する方法がないから。

あと、ファイルマップのハンドルの破棄は、それに対して一回だけすれば
いいのかなぁ、しかもそれは\0で完璧に埋めてくれるのかが疑問です。
あぁ・・・果てしない
0751デフォルトの名無しさんNGNG
Viewは、ファイルじゃない。
ファイルにマップされた「メモリ」だ。

ふつうにメモリ操作しとけ。
0752デフォルトの名無しさんNGNG
Viewは使い終わったらきちんとUnmapしとけ。
してないだろ
0753デフォルトの名無しさんNGNG
EXPORT LRESULT CALLBACK MyHookProc(int nCode, WPARAM wp, LPARAM lp)
・・・・・・・
・・・・・・・
hMapFile1 = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "MyObject1");
//SetFilePointer(hMapFile1,0,0,FILE_BEGIN);
buf=(char *)MapViewOfFile(hMapFile1,
FILE_MAP_ALL_ACCESS, 0, 0, 0);

ハンドルが各プロセスに継承できるみたいですがまだやってません。
なので、毎回呼んでます。OpenFileMapping&MapViewOfFile
何千回もやるので、UnMapViewOfFileはフックの終了時
に一回だけやります・・・
0754デフォルトの名無しさんNGNG
UnmapはMapした回数分きちっとやれ。
手を抜くな。
0755デフォルトの名無しさんNGNG
>>753はメモリを何千回も確保したあとで、最後に一回だけ解放するタイプか?(藁
0756デフォルトの名無しさんNGNG
戻り値をチェックしていますか?
0757デフォルトの名無しさんNGNG
あと、OpenFileMapping でオープンしたハンドルはちゃんと CloseHandle しないといけない。
でないとシステムにハンドルがどんどん溜まっていく。
特に別プロセス内(例えばエクスプローラとか)でハンドル作るので、
解放し忘れはシャットダウンするまで解放されない可能性があって、
非常に(゚Д゚)マズー!
0758デフォルトの名無しさんNGNG
WinXPで追加されたAPIってどんなのがあるの?
0759デフォルトの名無しさんNGNG
システムフックで使われるDLLは各プロセスにロードされるとの事ですが、
これは、例えば、
プロセスが10個走っていて、
DLLのコード領域だけでが1メガメモリを消費する場合、
最初から物理メモリは10メガ消費されるのでしょうか?

それとも、コード領域に変更があった時に初めてコード領域を
コピーするのでしょうか?
0760デフォルトの名無しさんNGNG
いや、コード領域はDLLのファイルマッピングなんで、ムダにメモリを消費はしません。
ただしマップされるアドレスはプロセスごとに異なります。

んで、コード領域は読み出し専用なんで、変更できません。たしか。

データ領域はプロセスごとに用意されますです。
0761デフォルトの名無しさんNGNG
>>759
> 最初から物理メモリは10メガ消費されるのでしょうか?
No

> それとも、コード領域に変更があった時に初めてコード領域を
> コピーするのでしょうか?
Win NT/2000/XP 系では、その通り

Win 9x/ME 系だと、そもそも書き込めない (copy on write が実装されてないので)
だからシステム DLL に対してブレークポイントを設定できません
0762760NGNG
>>761
あ、NTはそーなんだ。情報さんくす。
0763760NGNG
>>761
・・・コード領域って変更できたっけ?
言われてみれば確かにブレークポイントを仕掛けるために
書き換えないといけないよな・・・
あれ???
0764デフォルトの名無しさんNGNG
>>755
ぬわにぃぃぃ!笑われてしまいました。けどどーもうれしいっス。
FileMappingはなんだかmallocやglobalallocに似ていて、
これらの命令は大して時間のかからない命令だと聞いたことがあるので
そう思ってUnmapもいっぱいやることにします。クローズもやります。
返り値もやります。ありがとうございます
0765デフォルトの名無しさんNGNG
・・・・うまくいきました。快適な動作です。
けれど、毎回openfilemapping,closehandleをしているのに、なんで
値が残っているのがわかりません。、たとえば、マッピングじゃ
なく、ほんもののファイルだったら、closehandleしても”ファイル名”の
ファイルが残るわけですけど、今回はいわば”MyObject1”というファイルが
残ると考えるのでしょうか。けれど、そのばあい、プログラムが終了しても、
”MyObject1”というファイルが、残ることとなり、これを消すにはどうしたら
いいかわかりません。MyObject1自体どこにあるかわからないし・・・・
0766デフォルトの名無しさんNGNG
CreateWindowEx で WS_EX_TOPMOST とやっても
新たに作られたウィンドウの下になってしまいます
常に最前面を保証することは出来ないんでしょうか?
0767デフォルトの名無しさんNGNG
TOPMOSTしてるのは98%ドキュンプログラム。
0768デフォルトの名無しさんNGNG
>765
リファレンスカウントがある。全部CloseHandleしたらファイルもなくなるはず。
ところで、Dllのロード時にOpenFile&MapViewしてアンロード時にUnmap&Close
してやればいいんじゃないの?まあ快適ならそれでいいけど。
0769デフォルトの名無しさんNGNG
>>765
Openしたものだけじゃなく、Createしたものも含めて全部
アンマップ&クローズしたら、消えるはず。
0770デフォルトの名無しさんNGNG
>>766
そんなソフト使いたくない。邪魔だ。消えれ。

・・・という個人的な感情を置いとくなら、
タイマかなんかで常にSetWindowPosで前にもってくれば良いのでは?
0771デフォルトの名無しさんNGNG
ついでにZOrderいじるのも99%ドキュンプログラム。
0772t.tNGNG
Bitmap A(大)とBitmap B(小)を用意しまして、
Bitmap AをWindowに描画して、Bitmap Aの座標系
でBitmap Bを回転して描画しようとしています。

回転させたBをAに描画しますと、白い隙間ができてしまいます。
何か方法がございましたらご教授願います。
0773デフォルトの名無しさんNGNG
いまいち解からん。隙間ってなに?
何か方法って、何をどうしたいの?
0774デフォルトの名無しさんNGNG
>>772 それは Win32API の質問なのか?
0775デフォルトの名無しさんNGNG
>>770 >>771
LiveDoorとか広告付きプロバイダのクライアントソフト作ってるんだろ
0776デフォルトの名無しさんNGNG
>>770
作ってるのはスクリーンセーバなので常に最前面にあって欲しいのです
それと高速化のため描画をケチって変化があった部分だけにしてるので
他のウィンドウに前へ出てこられると画面に残ってしまうのが困るのです
0777デフォルトの名無しさんNGNG
他のウィンドウが前へ出てきたら
スクリーンセーバーを終了というのはどうでしょう。
0778デフォルトの名無しさんNGNG
>>777
いちおうWM_ACTIVATEを拾って終わるようにはしてるんですが
なんか悔しいので常に最前面にする方法はないのだろうかと

ちなみに >>772 はBを回転してWindowに描画するのではなく
Windowをドット走査して回転後のBの範囲なら色を転写で済むかと

それから >>767 >>771 >>775 は逝って良しかと
0779デフォルトの名無しさんNGNG
>>768,769
納得いきました。ありがとうございます。
0780デフォルトの名無しさんNGNG
>>772
「あるドットが回転・拡大後にどこに当たるかを算定すると、
ドットが抜けて白くなったり、計算量が増えてイヤン。
拡大・回転後のドットが元々はどこにあったのか、を算定
すると、そのあたりが旨くいって(・∀・)イイ!」
という記事をどっかで、見たことがあるな。
0781デフォルトの名無しさんNGNG
多分まだ作らないんですけどドライバはどーやって作ったり
コンパイルするんですか?
0782デフォルトの名無しさんNGNG
ほとんどがCとアセンブラで書かれてる。
たまにぜんぜん違うので書かれてるかも知れない。

DDK嫁
0783デフォルトの名無しさんNGNG
質問ッ!
フォントのベースライン位置を取得する方法はありませんか!

複数種類のフォントが混在する文字列を、
ベースラインにそろえてビシッと描画したいのです!
でもTextAlignは「ベースラインを指定」でなく「左肩」を指定したい!
(描画開始位置として左肩座標を指定し、かつ、
 基準となるフォントのベースライン位置に
 ほかのフォントのベースラインを合わせたい)
さぁ、君ならどうするッ!?
0784デフォルトの名無しさんNGNG
めんどくさいのであきらめる
0785デフォルトの名無しさんNGNG
GetGlyphOutlineで、ちまちま調べながら書く。
0786デフォルトの名無しさんNGNG
>>780
Cマガジンぽい
0787デフォルトの名無しさんNGNG
>>785 レスありがとうッ!
うーん、しかしGetGlyphOutlineはあまりにも生っぽいかなぁ‥‥。
なんかもっと一撃でベースラインを得る手段が有っても
よさそうなもんなのになー。

「ベースラインから」指定で、メモリDC上に
背景塗りつぶしを伴う描画をさせ、
ピクセルを走査して実際に描画された高さを得て、
ベースラインからの上下高さを計算する
‥‥という泥臭い方法を思いついた。

だがもっとスマートなやり方きぼん。

>>784のレスにも愛を感じたYO‥‥アリガ�d
0788785NGNG
>>787
あー。
なぜ思い付かなかったのか。
GetTextMetricsだ。
0789デフォルトの名無しさんNGNG
>>788
あ、そうか!!
TEXTMETRICの解説も目を通してたがBaselineって名前のメンバを探してた‥‥
しかしなるほどこれでいける!↓
http://akasaka.cool.ne.jp/phys/physjpn/htextmetric.htm

了解ッ! ありがとぉ!!
0790デフォルトの名無しさんNGNG
テキスト中で}を検索すると、カタカナの「マ」も引っかかってしまう
のですが、こういうのはどうしたらいいんでしょう。。
だいたいコンパイラとかはどうやって判別してるのかが疑問だし興味があります。
0791デフォルトの名無しさんNGNG
>>790
2 バイト文字の先頭バイトだったら (_ismblead()) 次のバイトを読み飛ばす。
マルチバイト文字列をやめて、ワイド文字列にしても良いけど。
0792デフォルトの名無しさんNGNG
>>780 778に同じこと書いてあるじゃん。
0793デフォルトの名無しさんNGNG
wsock32.dllにEnumProtocolがあります。
dllを自作して使用したことがあって(GetProcAdressを用いて)。
あるんですが、どうも今回はGetProcAdress(hSoLib,"EnumProtocol")と
やっただけではカーネルの例外とかなにやらのページ違反がでるので
だめです。GetProcAdressで、windows\systemのdllを使う方法
とかを調べれば光が見えてくるでしょうか?
0794デフォルトの名無しさんNGNG
>>793
WinNT & VC++6(SP0かな)の環境だと、
wsock32.dllに実際に含まれているのは
  EnumProtocolsA (forwarded to MSWSOCK.EnumProtocolsA)
  EnumProtocolsW (forwarded to MSWSOCK.EnumProtocolsW)
で、EnumProtocols自身は、VC98/Include/NSPAPI.hで
上記のいずれかに#defineされてる。
本当にwsock32.dllでEnumProtocols()が提供されてる?
実際試してみたけど、GetProcAddress()はNULLを返すよ。
0795デフォルトの名無しさんNGNG
我流でいい方法を見つけました。それはimplibで.libを作ってから
手っ取り早くtypeあるいはmoreすることです。そうすると、
EnumProtocolsAとEnumProtocolsWはあって、EnumProtocols()は
ないです。(ごめんなさい)けれど、EnumProtocolsAでさえ、
やはりGetProcAdressできません。(Win98、純粋なフリーコンパイラ)
main.cppの(my)includeファイルで、#define EXPORT extern "C" __declspec(dllexport) __stdcall
を使ったりするのか、、わかりません。また報告します
0796デフォルトの名無しさんNGNG
APIじゃないかもしれませんが・・・。

CDのオートランなんだけど
autorun.infに
[autorun]
OPEN=AUTORUN.EXE
ICON=AUTORUN.EXE
て今までかいていたのだけど

AUTORUN.EXEに引数を渡すのにはどうすればいいのでしょうか?
[autorun]
OPEN=AUTORUN.EXE -option
ICON=AUTORUN.EXE

だと動きませんでした。どこかにちゃんとしたドキュメントはないのでしょうか?
0797デフォルトの名無しさんNGNG
autorun.exe -option を ShellExecute する autorun2.exe を作るんじゃダメ?
0798デフォルトの名無しさんNGNG
CreateWindowで作ったエディットコントロールの背景色を
変えたいのですが、WM_CTLCOLOREDIT、SetBkColor()で
文字のある行の背景色は変わるのですが、何もないところの
色はシステムのカラーになってしまいます。全体的に背景色
を変えるにはどうすればいいんでしょうか。
0799教えてクンNGNG
さっきほど間違えて,VB質問へ書いてしまった...

あの,CreateFileA等のDLLのソースは
公開されてるのでしょうか?
それに,似たDLLを作りたいので,どなたかご存知の方
よろしくお願いします.
0800デフォルトの名無しさんNGNG
>>798
WM_CTLCOLOREDITで、背景にしたいブラシのハンドルを返します。
このハンドルはエディットボックスが存在する限り保持しないといけませんが、
最終的には自分で破棄してください。
0801デフォルトの名無しさんNGNG
>>799
APIのソースは公開されてないはずです。
似たDLLって一体・・・?
0802教えてクンNGNG
>801
そうですか,ありがとうございました.
ある理由でWinAPIが使えない環境なんで,
独自のAPIを作らなければいけなくなってしまって...
0803デフォルトの名無しさんNGNG
ハンドルとかが難しくてわかんないからWIN32API禁止とか言われたんだろう。
かわいそうに..
0804教えてクンNGNG
>803
いえ違います.あるHWに特化していて,
WinAPIじゃ同期がとれないので,
作る羽目になりました.
もちろんWinAPIもコールできますけど,
NT系のOSだと,キャッシュとかするし,
まあ理由はいろいろです.
ソフト屋さんはHWのことあまり考えないからまいっちんぐ
0805803NGNG
あらららHW絡みですか。

NTならROWLEVELアクセスとかも一応あるから
それでがんばってみては?
0806デフォルトの名無しさんNGNG
WINAPIの使い方が解りません
<windows.h>を読み込めばいいのですか?
0807デフォルトの名無しさんNGNG
Platform SDKのドキュメントを読みなさい
0808デフォルトの名無しさんNGNG
803=アホ
0809794だけど、795は793だよな?NGNG
>>795
乗りかかった舟なんで、もうちょっとつきあうけど、
WinNT & VC++6.0(sp0)の環境で、EnumProtocols()ではなく、
EnumProtocolsA()やEnumProtocolsW()に対してGetProcAddress()を試みると、
Non-NULLが返るんで、きちんとアドレスは取れている。

フリーのコンバイラを使ってるってみたいなんで、それ絡みかも。
参考までに、ソースも貼っとくね。
assert()で引っかからなければOK!

#include <windows.h>
#include <stdio.h>
#include <assert.h>

int main(void)
{
  typedef INT (*func)(LPINT, LPVOID, LPDWORD);

  HINSTANCE hDLL = LoadLibrary("wsock32.dll");
  assert(hDLL != NULL);

  func pEnumProtocols = (func)GetProcAddress(hDLL, "EnumProtocolsA");
  assert(pEnumProtocols != NULL);

  FreeLibrary(hDLL);

  return 0;
}
0810教えてクンNGNG
>803
Thanx
0811デフォルトの名無しさんNGNG
Windows XP では、GetVersionEx() は何を返すのだろう?
やっぱ、VER_PLATFORM_WIN32_NT で、
verInfo.dwMajorVersion は6とか?
0812デフォルトの名無しさんNGNG
795は793です(793)>809
(僕はテキストエディタも作ってた進化する無料マニアです)
まずはありがとうございます。>809
インターネットに少しはまり過ぎてしまいまして、ちょっと
ネット疑惑症ぎみです。

結局自分のコンピュータから吐き出される情報(多分結局は文字列だと思う)と、
どこに発信されているかを、システムレベル(?)で捕らえたい
と思ってます。つまり自分(てめー)のコンピュータが何をしているか
くらいは知っておかなきゃあかん、くらいの意気込みで前向きにやってます。
通信に関しては初心者なので手当たりEnumProtocolsAから
入ってみようか、と思い立ちました。

アプリレベルのプロトコル(?)もあるし、直接文字列を取ってもよくわかんない
かも知れないんですが、とりあえずはそこからやるしかありません。

EnumProtocolsA以外に使える概念とか言葉があったら
適当に教えてください。(EnumProtocolsはまだうまくいって
ないですが、クリアしたいとおもいます)
0813デフォルトの名無しさんNGNG
今アニメーションを表示させるプログラムを書いているのですが、
フレームの表示にSetDIBitsToDeviceを使用しています。
どうやらSetDIBitsToDeviceが処理速度のネックになっているのですが、
より高速な手続きはあるのでしょうか?
0814デフォルトの名無しさんNGNG
>>813
画面とDIBのピクセルフォーマットを合わせること。
256色以下なら、パレットも完全に一致させること。
・・・要するに、色変換処理が起こらないようにしろってことだな。

それで速度が不足なら、DirectDraw でも使い給へ。
0815813NGNG
>>814
ありがとうです。
>画面とDIBのピクセルフォーマットを合わせること。
というのは、24bitのDIBを転送するのであれば、
画面も24bitにしろってことでしょうか。
現在24bitのDIBを転送しているのですが、画面のプロパティで
24bitに設定するより16bitに設定した方が速い感じです。
0816デフォルトの名無しさんNGNG
>>811
Windows XP は確か Windows NT Ver. 5.1 です。
Windows 2000 とはわずか 0.1 しかバージョンが違いません。
0817デフォルトの名無しさんNGNG
>813
bit合わせはチップセットとVGAカードによる
http://www2.bbspink.com/test/read.cgi/erog/999446678/329-404
取り合えず前、調べられる範囲で調べた結果だがこんな結果になった
個人的にはなんとも言えないという感じなので処理の都合で考えるといい

VGAのVRAMにアニメーションデータが入りきるならDirectDrawは100%有効
でなきゃ逆に遅くなる場合もある
アニメーションなら場合によってはオーバーレイサーフェイスが有効かも

取り合えず今24bitデータで持ってるなら
データ自体を16bitへ落すことを考慮すべし
それだけで大幅に変わるはず

あと本当にSetDIBitsToDeviceがボトルネックなの?
HDDとかじゃなくて?
0818デフォルトの名無しさんNGNG
ぬぉーーーー、報告です。
結局EnumProtocolsAは、スタティックライブラリにありました。
(前はAが抜けていた)いやしかーーーし。
システムにはいっぱいDllが転がっているので、これを使えるようになるために
思い、GetProcAddressにこだわりました。

WSOCK32.DLLからGetProcAddressを使うには、
Kernel32.dllのGetModuleFileNameExが、ヘッダtlhelp32.hを用いて
使えることを参考にしたんですが、
typedef int (WINAPI* PENUMPROTOCOLS)(LPINT,LPVOID,LPDWORD);
int WINAPI EnumProtocolsA(LPINT,LPVOID,LPDWORD);
・・・・・・
fpEnumProtocols =(PENUMPROTOCOLS)GetProcAddress(hSockLib,"EnumProtocolsA")
とやればうまくいきます。EnumProtocolsAの宣言がないと、fpEnumProtocols(1,2,3);
の代入のところでプログラムが凍り、フリーライブラリすると画面が消えるはめはめマン
でした。あぁ、これでこれからはいざというときシステムDLLが使える(ます)

しかし、結局EnumProtocolsって何の役に立つんですか?
表示したらf・とか表示されて終わってしまいました。僕は疲れました。

・・・漏れはなかなかやる男でした。これからもいろんなことを教えてください。
0819デフォルトの名無しさんNGNG
ちなみにdefやdmpや__declspec(これはまだ不確か)
とか、も知りました。externがグローバル宣言だつーのも
再認識しました。でもアンダーバーの意味がわかりません。。

あぁ・・・・・・
0820デフォルトの名無しさんNGNG
>>819
アンダーバーはMicrosoft独自拡張を意味する。
とヘルプにも書いてあると思うけど。
0821デフォルトの名無しさんNGNG
>>813

 環境によっては、DIBSectionにしてそのHBITMAPで描画すると
わずかに速くなる場合もある。
0822811NGNG
>>816
そうなんだ〜。>XP=NT5.1
つまり、XPは2000との違いはインターフェースだけで
中身はほとんどカワランということ?(w
0823デフォルトの名無しさんNGNG
>>822
なにを今更・・・
0824デフォルトの名無しさんNGNG
>>820
アンダーバーが1つと2つでどう違うのかも、なぞです。
(僕にはヘルプもないんです汗)
0825デフォルトの名無しさんNGNG
>>768
その方法だと、DLLメインのプロセスでしか
ハンドルが定義されないため、フックを掛けた
他プロセスでは改めてOpenFileMappingを被フック
プロセスごとにやらないとだめです。
(主DllでのCreateFileMappingとCloseHandleも
結局一回づつはやりますが。)
>>809
assertありがとうございました。
0826デフォルトの名無しさんNGNG
>>824
なぜ無いの?
0827デフォルトの名無しさんNGNG
無料コンパイラにはそんな良いものはついて
こないョ・・・(クラックなんかしてないョ・・・前は、ゲームとかは・・(謎))
0828デフォルトの名無しさんNGNG
>>826
俺のお気に入りにある目くるめく
参考HTMLの数々を見せてあげたい
0829デフォルトの名無しさんNGNG
間違えて上げてしまいました
0830デフォルトの名無しさんNGNG
でも見せてあげないんだろ? (w
0831デフォルトの名無しさんNGNG
そんなに見たいんなら方法を考えてくれ
お気に入りを圧縮するくらいはワケナイゾ

!??
0832デフォルトの名無しさんNGNG
お気に入りの中にWTLの良リンク無い?一つでイイからさ。
適当に使ってるから、用法あってるのか心配になってきたよ。
ここ以外で一つよろしく http://www.codeproject.com/wtl/
0833デフォルトの名無しさんNGNG
>>827
なぜMSDN Onlineを使わないんですか
0834デフォルトの名無しさんNGNG
使ってるけどあのサイトは基本的に
複雑すぎて使えない。関数の検索をして
ひっかかったものをお気に入りに入れるくらい。
>>833
0835デフォルトの名無しさんNGNG
はっきりいってない>832
0836デフォルトの名無しさんNGNG
ネットストーカーこえぇーーーーー(TBS)
0837デフォルトの名無しさんNGNG
>>834
DirectXのヘルプが英語ででてくるのでビビって読めない、の間違いだろ。
0838832NGNG
>>835
マジすか(;´Д`) 今やMFCやATLに変わるスタンダードだと思ってたよ。
あたしゃネット環境すら整ってない化石野郎なもので…。.NETなんてしりません。

こんなに便利なのに…、流行ってないならやっぱ使わない方が
良いのかなぁ。いや将来の事を考えての話です。レスどうもでした。
0839デフォルトの名無しさんNGNG
WTLはCLRに化けました
って事でC#やれ
0840デフォルトの名無しさんNGNG
>>839
Tonyさんですか?( ´Д`;
>>825
え、フックでインストールされた時でも、そのプロセスでDllMainは呼ばれるよね?
違ったっけ。
0841デフォルトの名無しさんNGNG
>>834
MSのサイトからPlatformSDKのドキュメント落としてくれば?
0842デフォルトの名無しさんNGNG
つーか関数名分かってるならgoogleで検索すれば
MSDNがほぼ上位に引っかかるんだが。
0843813NGNG
どうもありがとうです。

>>817
>データ自体を16bitへ落すことを考慮すべし
>それだけで大幅に変わるはず
これが、少し面倒なので24bitでデータを持っているのですが、
勉強だと思って16bitでいけるように努力してみたいと思います。

>あと本当にSetDIBitsToDeviceがボトルネックなの?
>HDDとかじゃなくて?
メモリ上にデータがあるので、HDDは関係ないです。
SetDIBitsToDeviceをなしにするとfps 55くらいなんですが、
ありだとfps 45程度です。

>>821
どこかで見た気がします。
調査してみます。
0844813NGNG
>>821
>環境によっては、DIBSectionにしてそのHBITMAPで描画すると
>わずかに速くなる場合もある。
CreateDIBSection&BitBltにしたらfpsが1,2近くあがりました。
感謝。
0845デフォルトの名無しさんNGNG
837>>lccのヘルプはあるけど(英語)読むよ。
つーか、不便には違いない<英語。sdkのヘルプみたいのも
あるけど、話してたのはそのヘルプのことじゃあなくて、
アンダーバーのことが書いてあるヘルプなの。
0846デフォルトの名無しさんNGNG
>843
オンメモリにもてる程度のデータ量ならDirectDrawもいけるかもね
VRAM容量がふんだんにあることが認識できたらDirectDrawルーチンに
切り替えるとかやってみたら?

というか45FPSで納得できないんか?(´Д`;)
0847デフォルトの名無しさんNGNG
>>845
アンダーバー云々もMSDNに書いてあるんだが。
0848デフォルトの名無しさんNGNG
CreateFileの FILE_FLAG_NO_BUFFERINGなんですけど。

MSDNの「Windows 2000 アプリケーションの互換性」に、
「Windows 2000 では、特に Ultra 66 IDE デバイスのように、新しいデバイスを
 サポートするときには境界合わせが多少異なる場合もあります。」
とあります。
「多少異なる場合」ってどんな場合で、どう異なるんですか?
0849813NGNG
>>846
DirectDrawへの変更も考えてみます。

>というか45FPSで納得できないんか?(´Д`;)
まだ、完成していないんです。(´Д`;
30fpsまではOKだと考えていますが、転送はけっこう時間を食っているので。
fps落ちたら、転送はあまり重要でなくなってくる・・・のだろうか。
0850デフォルトの名無しさんNGNG
>>847それは探せというほうが・・・無理だ・・・・
目の酷使を避けることは僕の中で優先順位高いんです
0851デフォルトの名無しさんNGNG
>>850
てめえの都合なんか知ったことかよ。
目を使いたくなかったらvia voiceでも入れろ。

そんなのを2chで教えてもらおうなんて虫が良すぎる。
0852デフォルトの名無しさんNGNG
>>851
850 != 弱視 ? 禿同
0853デフォルトの名無しさんNGNG
あおんなカス
オメーにオセーてもらったかどうかなんてわかんねーんだYO
どうせ低スキルの癖にYO
うせな
0854847=851NGNG
>>853
2chなんか見てると目に悪いだろ。
頭は相当悪いみてえだけどな。
0855デフォルトの名無しさんNGNG
┌──────────────────────―─―┐
│□ ■2ch BBS ..− Microsoft Internet Explorer    囗曰区||
├───────────────────────┬─┤
│ファイル(F) 編集(E) 表示(V) お気に入り(A) モナー(∀)   |::田|
├────────────────┬──────┴─┤
| ←     →     ×     圍    合  |   Q          》|
| 戻る   進む   中止  更新  ホーム |  検索          |
├────┬───────────┴──┬─┬───┤
│アド レス(D) | □http://www.2ch.net/2ch.html  |▼|⇒移動|
├────┴───┬┬─────────┴─┴──┬┤
│                ├┤                      ├┤
|LINUX          ||                      ||
│UNIX           ||                      ||
│プログラマ.  ┌───────────────────────┐
│プログラム技| 2ch                                 |
│        ├───────────────────────┤
│        | >>853 は不正な処理を行いました。   ┌───┐   |
│        | 残念ですが >>853 の人生を          | 終了 |   |
│        | 終了させてあげて下さい。(推奨)       └───┘   |
│        |                                  |
│        └───────────────────────┘
│特別企画        ├┤                      ├┤
├┬──────┬┼┼┬────────────┬┼┤
├┴──────┴┴┴┴──┬─┬─┬─────┴┴┤
│□ エラーが発生しました    |  |  |●インターネット |
└─────────────┴─┴─┴───────┘
0856デフォルトの名無しさんNGNG
>>813
CreateDIBSection()
0857遅レスカコイイNGNG
>>856
>>821 >>844
0858glerNGNG
1:QueryPerformanceFrequency();
QueryPerformanceCounter();
この2つの使い方教えてください。
0859デフォルトの名無しさんNGNG
>>858
なぜMSDNを(以下略
0860glerNGNG
恥
0861デフォルトの名無しさんNGNG
ブラクラって知ってますか?
0862 ◆osama43U NGNG
ブラクラ…Brother Class
共通の基底クラスから派生したクラス。
ex)
class A;
class B : public A;
class C : public A;
のとき、BとCは相互にブラクラである。
0863 ◆osama43U NGNG
ちなみに、共通のクラスを所有しているクラスをシスクラ(Sister Class)という。

ex)
class A;
class B {
    A a;
};
class C {
    A a;
};
のとき、BとCは相互にシスクラである。
0864デフォルトの名無しさんNGNG
ウケたがスレ違いだ
0865デフォルトの名無しさんNGNG
全検索後に対象を選んで一括で置換するの置換ルーチン
の完成だ!バンザイ
ある関数の中の変数名だけ変えたいときとかあんだろ?
そういう風にしたのダ
リストビューは複数選択の選択されているものの番号インデックス
を得るListView_GetNextItem(orLVM_GETNEXTITEM同じだゴルぁ)
は再起的に使うことを中心に説明しとけよ。ちょっとてこずったゾ

ちなみに着色ルーチンも強化したんだゴルぁ。

ダイアログコールバック内でのstaticの大切さについて教えてください
僕はGetDlgItem(hDlg,...)使ってるけどHWND hLview=クリエイトリストビュー
はstatic HWND hLviewでないといけないんです。あとchar str[64]も
static char str[64]じゃないとだめです。なんとstrlen(str)は、strに
きちんと文字列が入ってるのにもかかわらず常に7とかいってます。なんで?
staticについて教えてください
0866デフォルトの名無しさんNGNG
saMuiYO!
0867デフォルトの名無しさんNGNG
MessageBoxEx使って英語指定しても「はい」「いいえ」が日本語のままなのですが
こんなものなのでしょうか?
こんな感じです。

MessageBoxEx(Handle, &BoxMsg[1], &BoxCaption[1], MB_YESNO|
MB_ICONQUESTION|MB_APPLMODAL, LANG_ENGLISH )
0868デフォルトの名無しさんNGNG
>>867
MessageBoxEx() のヘルプから抜粋

> それぞれの言語にローカライズされた Windows 95/98 や Windows NT/2000 は一般に、
> 特定の言語セットのリソースだけを保持していることに注意してください。たとえば、U.S. 版
> は LANG_ENGLISH、フランス語版は LANG_FRENCH、ドイツ語版は LANG_GERMAN、日
> 本語版は LANG_JAPANESE を提供します。

俺も詳しくは知らんが、日本語版の Windows で実行する限り LANG_ENGLISH 使えんので
は?
0869デフォルトの名無しさんNGNG
TextOutで書いた文字がなんか他のウィンドウに
さえぎられると消えちゃうんだけどどーしたらいいかな
0870デフォルトの名無しさんNGNG
WM_PAINTで描画をしなさい
0871デフォルトの名無しさんNGNG
>>869
ソレが自然だとは思うが、alpha-blendでも使ってみるか?
0872デフォルトの名無しさんNGNG
>>869
ディスプレイに油性マジックで書けば消えないよ!
0873デフォルトの名無しさんNGNG
>>869
また書き直す
0874クロスボウとやらNGNG
APIの質問ッス。

マルチもモニタ環境で任意のモニタにウィンドウを表示させるには
どすればいいのでしょ?とりあえず、モニタの列挙とかやってみたいんすけど。
それ関係のAPIがあれば教えて下さい。
マルチモニタは、デュアルヘッドとかじゃなくて、ビデオカードが2枚
刺さってるタイプっス。DirectXには依存したくないです。
0875デフォルトの名無しさんNGNG
>>874
つか、マルチディスプレイの制御は、GDIですらDirectXに頼ってるから
DirectX以外に方法はないと思う。
0876デフォルトの名無しさんNGNG
SetWindowsHookEx( WH_JOURNALPLAYBACK,...);
によって
プレイバックツールを作成中に気付いたんですが

Windowsキー関連の動作がプレイバックされません
ログを取ってみると
イベント自体はしっかり投げていますが
単純に無視されているようです(前後の他の動作は問題ない)

これは仕様なんでしょうか?

参考までに環境
VC++6.0、Win2k&Win98
0877デフォルトの名無しさんNGNG
>>872
今度は消せなくなったんですけど(;_;)
どんなAPIで消せますか?
0878デフォルトの名無しさんNGNG
>>877
模型店でラッカー薄め液を買ってきましょう。
0879デフォルトの名無しさんNGNG
僕のノートの液晶が白く濁ってもとに戻りません
0880デフォルトの名無しさんNGNG
>>879
燃えないゴミの日に出しましょう。
きれいサッパリ消えます。
0881デフォルトの名無しさん NGNG
MFCで作ったDLLをSDK側から呼び出したいんですが
こういう事はできるんですか。
0882デフォルトの名無しさんNGNG
>>881

意味が分かりません。
MFC Appウィザード(DLL)で作ったDLLはDLLをロードできる言語でたいていロードできます。
(引数とかにクラスなんか使っていなければ。)
後、名前が変に変形するので前もってチェックして下さい。
0883デフォルトの名無しさんNGNG
>>881 アセンブラでMFC側の作った名前を呼び出すサンクルーチンを作れば可能

でもMFC側でC用のインターフェースルーチンを作った方が10倍簡単
クラスインスタンスは void * で渡せ
0884超初心者NGNG
質問です。

CreateFileで開いた通信リソースに、WriteFileで書き込みをするなどの操作をすると、
たまに「ERROR_OPERATION_ABORTED」エラーが返ってきます。ひどいときには
一度閉じないとどうにもならなくなっちゃいます。

もともとwin98で動いていたソフトでそのときはなんともなかったんですが
win2kで動かしてみたらこんなことが起こるようになってしまいました。

作った人はもういないし、私はCしかわからないし、ヘルプやらなにやら見てももう
お手上げです。
何でもよいのでヒントとかあったら教えてください。お願いします。。
0885879NGNG
>880
その手があったか(・∀・)!
ありがとう!
0886881NGNG
「MFC の拡張 DLL(MFC の共有 DLL 使用)」じゃなくて
「MFC の共有 DLL を使用」の方でやったらできました。
0887デフォルトの名無しさんNGNG
キーボードの「@」キーが現在押されているかどうかって知る方法ありますか?
仮想キーコードリストに載ってなかったもんで、どうしたものやら。。
0888デフォルトの名無しさんNGNG
VkKeyScan('@') こうか。。。C0だった。
0889デフォルトの名無しさんNGNG
>>876
WH_JOURNALPLAYBACKってWH_WNDPROCとどうちがうの?
0890デフォルトの名無しさんNGNG
>>889
何故MSDNを(以下略
0891876NGNG
ごめ〜ん
調べてたらMSDNに思いっきり書いてあったよ〜
仕様だそうだ・・・

さて、回避方法あるんかな・・・
0892クロスボウとやらNGNG
>>875
レスどうも。

>>GDIですらDirectXに頼ってるから
マジっすか?

なんとなくEnumDisplayMonitors()ってやつが使えそうです。
ttp://sysneitf.hoops.ne.jp/monitors.html
0893デフォルトの名無しさんNGNG
>>884
GetLastError() の値は調べた?
0894超初心者NGNG
>>893
はい、そうすると995ってエラーが返ってきちゃうんです。
非同期書き込みを行っているのですが、Witefile()が失敗(0返ってきた)したときの
GetLastError()の値は995(ERROR_OPERATION_ABORTED)か
997(ERROR_IO_PENDING)です。

995が返ってきたらGetOverlappedResult()で処理が終わるのを待とうとするのですが
これも失敗することがあって、このときのGetLastError()の値は995でした。
こんなときはどういう原因を考えればいいんでしょう・・・
0895デフォルトの名無しさんNGNG
>>894
995(ERROR_OPERATION_ABORTED)の意味は、
「The I/O operation has been aborted because of either
a thread exit or an application request.」
(スレッドが終了したか、アプリケーションが要求したから)
とあるな・・・
08961NGNG
createFile(...)を使って
ファイル書き込みをする場合、
バッファリングは不要でしょうか?
それとも,バッファリングした方が効率が上がるのでしょうか?
0897デフォルトの名無しさんNGNG
>>896
相手が普通のファイルならファイルシステムレベルでキャッシュ&バッファリング
してるから、アプリで余計なことしない方がいい。
0898デフォルトの名無しさんNGNG
>>897
胴衣。漏れなんか、10バイトずつでも
毎回 WriteFile(...) してるぞ(ワラ
0899デフォルトの名無しさんNGNG
WM_DROPFILESが来たとき、それがマウスの右ボタンか左ボタンかによって
ドロップされたかどうか分かる方法ってありますか?
0900デフォルトの名無しさんNGNG
ある描画アプリのショートカットを自分用にカスタマイズして使おうと
キーボードフックして、適当にメッセージ置き換えてます。

なんとかFとかスペースなど、単体のキーはPostMessageでそのアプリに
送れるのですが、肝心なctrl+F等の複合キーの送り方が分かりません。
ctrlとFを同時に送ってもうまくいかなくて…何かご存じの方アドバイスお願いします。
0901デフォルトの名無しさんNGNG
>>899
そのハンドラでGetAsyncKeyStateで調べればいいのでわ?
0902デフォルトの名無しさんNGNG
>>900
WM_KEYUPとかWM_KEYDOWNをひっかけてるなら、lParamの上位ビット。
詳しくはMSDNで。
0903900NGNG
>>902
ありがとうございます!>>901みて、アプリ側でctrl検出してたら駄目じゃん
…とか思って絶望してたところです。まだよく理解できてないのですが
できると分かっただけでやる気倍増です。感謝感激
0904デフォルトの名無しさんNGNG
>>901
GetAsyncKeyState(WM_LBUTTON)とやっても、右でも左でも0が帰ってきてしまうです。
つーか、ドロップされた時点ではボタンは離されてるんでこれでは駄目なようです。

やっぱり、OLE D&Dにするしかないのかなあ・・・
0905デフォルトの名無しさんNGNG
>>904
仮想キーコード間違ってない?
0906デフォルトの名無しさんNGNG
VK_LBUTTON だな。
0907デフォルトの名無しさんNGNG
>>905-906
レス書いたときのtypoでした。すいません。
0908FTONGNG
質問です。
ある矩形内のグラフィックを回転させて別の場所に画像を表示させるAPIとかってありますか?
やっぱり回転変換させてやらないとだめなんでしょうか。
0909デフォルトの名無しさんNGNG
>>908

ないと思う。
0910デフォルトの名無しさんNGNG
gdiplus使えば、カンタンに出来るよ。
Windows95が対象外になってしまうけど。
ひとつの案として言ってみた。
0911デフォルトの名無しさんNGNG
タスクトレイに表示されている他のアプリケーションのアイコンの状態を調べる
方法はないのでしょうか?(NOTIFYICONDATAのszTip程度の情報で良いのですが)
今できていることはタスクトレーのハンドル(クラス名は"TrayNotifyWnd")
を取得することぐらいです。
0912デフォルトの名無しさんNGNG
エディットコントロールをサブクラス化して、キーアップとマウスアップ
を捕まえてます。捕まえたとき、WM_LINEFROMCHARを送って行番号を
取得してるんだけど、キーアップの時はWM_LINEFROMCHARはうまく行番号
をとれるんですけど、マウスアップの時は、うまくいかない。
コントロールがそのとき同時にマウスアップのときにラインナンバーを
決定してるからかもしれないんだけど、どーもうまくやる方法ないかな。
EN_SELCHANGEのマスクを解除して(付けて?)良さげだけど、あんまり
メッセージ増やりたくないし、うまい方法ないかな
0913デフォルトの名無しさんNGNG
>>912

Delphi のコードですまんが、うまくいったよ。

procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
st,ed,ln:DWORD;
begin
SendMessage(Memo1.Handle,EM_GETSEL,WPARAM(@st),LPARAM(@ed));
ln := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,WPARAM(ed),0);
Label1.Caption := IntToStr(Ln);
end;
0914デフォルトの名無しさんNGNG
case WM_LBUTTONUP:
//Lindex = SendMessage(hMyEdit,EM_LINEFROMCHAR,-1,0);
SendMessage(hMyEdit,EM_EXGETSEL,0,(LPARAM)&Pchr);
Lindex = SendMessage(hMyEdit,EM_EXLINEFROMCHAR,0,(LPARAM)(DWORD)Pchr.cpMin);
ShowInformation(GetParent(hMyEdit),500,50,Lindex,"%-d行目です ");
break;
WM_KEYUPのときも同様な処理でそっちはうまくいくんだけど、
こっちがうまくいかない。もういっそのことあきらめようかとも
思ってる。ちなみにmfcなしでイベントハンドラ云々って扱えるの?
つーか、、マウス押すと(Lindexは0を返す)
選択範囲があるとき(色が反転してるとき)、選択範囲の上で
もう一度クリックすると、そのときだけ正しいラインを返すのです。
0915デフォルトの名無しさんNGNG
(レスさんくす)
0916デフォルトの名無しさんNGNG
912多分SetCaptureあたりの問題だった。
世話かけました。。
0917913NGNG
>>914

>SendMessage(hMyEdit,EM_EXGETSEL,0,(LPARAM)&Pchr);
>Lindex = SendMessage(hMyEdit,EM_EXLINEFROMCHAR,0,(LPARAM)(DWORD)Pchr.cpMin);

>WM_KEYUPのときも同様な処理でそっちはうまくいくんだけど、
>こっちがうまくいかない。

EM_EXGETSEL も EM_LINEFROMCHAR も Lparam と Wparam の
設定が変なような気がするが?
0918デフォルトの名無しさんNGNG
>>917うーん、
EM_EXGETSEL
wParam = 0;
lParam = (LPARAM) (CHARRANGE FAR *) lpchr;
EM_EXLINEFROMCHAR
wParam = 0;
lParam = (LPARAM) (DWORD) ichCharPos;
(宣言はCHARRANGE Pchrにて)
おいらのヘルプじゃこうなってる。EXLINEFROMCHARとLINEFROMCHARでは
LPARAMとWPARAMが逆らしいんだけどなぁ。

で、結局、イベントマスク設定して、親ウィンドウでNOTIFYでWM_LBUTTONUPを
捕らえる方法でやるとうまくいきました。ほんとはサブクラス化のコールバック
内で全部一括して扱いたかったんだけどね。やっぱ、サブクラス化の方のコール
バック内ではWM_LBUTTONUP(DOWNは問題ない)の送られ方がちょっと違う。
他ウィンドウにあったフォーカスがコントロールに移る時だけはWM_LBUTTONUPは
送られてくるみたいだけど、いったんコントロールのキャレットにフォーカスが
移ると、LBUTTONUPはもう送られてこない。もよう。
0919デフォルトの名無しさんNGNG
で、そこで別の新たな問題がありました。
メインWndProc内でCHARRANGE Pchrを宣言すると、
なぜか描画がおかしくなる。(これを消すと描画は問題ない)
static CHARRANGE Pchrとかやると、描画のおかしさが変化するし。
(Pchr自体使わなくてもそうなる)
PAINTSTRUCT paintをstatic PAINTSTRUCT paintとかやってもだめだしなぁ。
ちょっとメモリリークとかにも興味持ち出したし、この辺、どう?
はっきりいってただのCHARRANGE Pchrの宣言が引き金にはなってるんだけど、
CHARRANGEなんてPAINTSTRUCTとかHDCとかともかけ離れた存在のようにも
見えるし、関係性がわからない。BeginPaint,EndPaintとかの開放も(DeleteObjectとかも)
注意はしているのにですな。
0920デフォルトの名無しさんNGNG
(しまいにはCHARRANGE Pchrはグローバルで宣言してうまく
いってるけど、気になる僕に一言とか二言もよろしくお願いしたいです)
0921どなたかご存知?NGNG
ウィンドウメッセージのキューイング数ってどれくらいなんでしょ〜か。

WM_USER+αでウィンドウメッセージを多数使用している画面があって、
且つ取りこぼし厳禁。
なんで、キューイング数の上限を知りたいのですが。
0922913NGNG
>>918

おー、エディットコントロールではなく、リッチエディットコントロール
ですね。びっくりした。

>>919
>サブクラス化の方のコール
>バック内ではWM_LBUTTONUP(DOWNは問題ない)の送られ方がちょっと違う。

そうか。元のウィンドウ関数は、最初に実行してるの? それとも後?

>919

>BeginPaint,EndPaintとかの開放

元のウィンドウ関数を、最初に実行してるんだったら、これは必要ないのでは?
WM_PAINT を処理する必要があるの?
0923デフォルトの名無しさんNGNG
SetTimerで指定した識別子と、返ってきた識別子が違う、というのは
頻度的には、どれくらいのもんなんでしょ?
空リソース量とかいった、そのときの状況に依存したりするもんなのかなぁ...
0924デフォルトの名無しさんNGNG
>>922
あぁ、ペイント処理は、まったく別問題なんだけど、
BeginPaintとEndPaintはWM_PAINT(WndProcの)でやってること
なんだけど、まぁ、つまり、とりあえずWM_LBUTTONUPの
あれを、NOTIFYでやってやっとこさ、うまくいったんだけど、
そのあと、今度は描画に問題が出てしまったもんだから、
(BeginPaintとEndPaintのことを)書いた。(描画のとこの
割り当てと開放とかの問題じゃたぶんない、と言いたかった)
ただCHARRANGE Pchrを宣言するだけでなぜか描画がおかしく
なる・・・と。

えーっと、CallWindowProc(org_proc...)は最後で呼んでるから、後、って
ことかな。
0925デフォルトの名無しさんNGNG
>>923
HWNDは?
0926913NGNG
>>924
>えーっと、CallWindowProc(org_proc...)は最後で呼んでるから、後、って
>ことかな。

今回の問題とは関係ないかも知れませんが、とくに元のウィンドウ関数の内容を
書き換える、などの特殊事情がないかぎり、サブクラスのウィンドウ関数では
もとのウィンドウ関数を最初に実行しておくことをお薦めします。特に、描画
関係では WM_PAINT に伴う、BeginPaintとEndPaint の特殊性から、先に元の
ウィンドウ関数を実行しておかないと、表示が変になることがあります。わた
しも以前経験しました。そして、サブクラスのウィンドウ関数で WM_PAINT を
処理するときは、GetDC() と ReleaseDC() を使った方が良いです。

>ただCHARRANGE Pchrを宣言するだけでなぜか描画がおかしく

これについては全く分かりません。すみません。
0927923NGNG
>925
NULLじゃないです。
0928デフォルトの名無しさんNGNG
>>927
連続してSetTimer()を呼び出してみたけど、
2490個タイマーを作ったところで戻り値0になった。
GetLastError()は120。OSはWindows 98。
それまでは指定したのと同じ値が返ってきた。
今までもWM_TIMERのハンドラでタイマーIDは定数で
コーディングしてきたけどタイマーが動かなかった
ことはない。
0929デフォルトの名無しさんNGNG
>>924
変数を宣言しただけで挙動が変わる、というのならバッファオーバーランを疑うなあ。
それか、未初期化のポインタを使ってるとか。
0930デフォルトの名無しさんNGNG
>>928
MSDNのSetTimerの説明には、nIDEventパラメータで指定した値が
WM_TIMERのwParamに入ると書かれているから、定数で問題ないと思われ。
0931923NGNG
>928
わざわざ実験どうもです。
自分も、返り値が違うといった場面に遭遇した事が無いんだよね...
そういうものなのか...
0932デフォルトの名無しさんNGNG
>>930
だよねー。
MSのサンプルとかも定数だし。
一応、SetTimer()の戻り値はタイマ識別子だから、
引数で100を渡して300が返ってきたら、要求したタイマ識別子は100でも
実際のタイマ識別子は300、ということでwParamには300が入ってくる
罠かと思って。
0933デフォルトの名無しさんNGNG
SetTimer()の戻り値を保持しておいて、KillTimer()に使うのでわ?
0934デフォルトの名無しさんNGNG
926
>>913
描画に関してはまったく疎かったんだけど、結局は、

case WM_CREATE:
で、
hWndRadio = CreateWindow(....);
の直後に、
hFont=(HFONT)SendMessage(hWndRadio, WM_GETFONT, NULL, NULL);
をやっていたのが原因だった。多分うまく取れていなかった。
直後だとコントロールフォント自身のフォント設定が
不安定っぽい感じだった。Sleep()とか使ってもだめだった。
結局hFont=(hFont)GetStockObject(GUI_DEFAULT_FONT);GetObject(...)
で、ややこしいlfをこれまたいろいろ試してやっと大丈夫になった。
WM_GETFONTでうまく取れたように見えてたのはなんかの偶然だった。
あぁ、つかれた。でも結局メモリリーク関係なかったけど、
おかげで外国産のいいものを手に入れた。英語で感謝してきました。
フォントがうまくいってたやつを、それでデバッグモードで起動すると
文字がおかしくなることも結構助けになたヨ。おかげでいまでは
デバグモードで起動しても問題なく動く。

あぁ、お疲れ様といってください
0935デフォルトの名無しさんNGNG
WndProc内に戻ったPchrに乾杯
0936デフォルトの名無しさんNGNG
HTTP serverにデータを送信したいので、HttpSendRequest()を使いたいのですが、クッキーも送れますか?
それとも、クッキーは別関数で送るのでしょうか?
クッキーの送り方が解らないので、知りたいです。
0937デフォルトの名無しさんNGNG
WTLのAppWizardで、例えばSDIを作成した場合、そのプロジェクトに
イベント追加可能なDialogを後から挿入することって出来ますか?

普通にDialog挿入するとテンプレート作ってくれないですよね…。
今は仕方がないのでDialogベースの仮プロジェクト作って
あとから本プロジェクトにコピペしてるのですが色々、管理が面倒で…。

WTL、情報が少なくて参ってます。ご存じの方、どうか宜しくお願いします。
0938デフォルトの名無しさんNGNG
WinAPIの世界へよーころ
0939937NGNG
>>938
かちゅ〜しゃでみてたらレス付いてたから、一瞬よろこんじゃったYO!(笑
0940936NGNG
>>939
俺も(W
0941亜井 上男NGNG
一つのプロセスの中に複数のスレッドがあり、各スレッドから非同期で
同一ファイルに書き込みを行いたいんですが、どのような排他制御を
行えば完璧でしょうか。
0942デフォルトの名無しさんNGNG
そんな処理の仕方をしないこと
0943デフォルトの名無しさんNGNG
MutexかCriticalSectionを使いなさい。
0944デフォルトの名無しさんNGNG
>>936
lpszHeadersに"Cookie: CUSTOMER=WILE_E_COYOTE"とかを入れればよいだけでは。
HTTP Cookieの仕様はhttp://www.netscape.com/newsref/std/cookie_spec.htmlあたりで。
0945デフォルトの名無しさんNGNG
DOS窓のような奴をエディット コントロール使ってやろうと思ってるんだけど、
3つのことで困ってます。
・プログラム側からテキストを出力する方法
・ENTERで入力された行を取得する方法
・バッファの上限に行くと入力出来なくなるのを回避する方法
もしかしてエディット コントロール使うこと自体間違っているのかな?
誰か教えて。
0946デフォルトの名無しさんNGNG
>>945
エディットコントロール使うこと自体間違ってる。
教えたよ。
コンソールをアロケートするヨロシ。
0947デフォルトの名無しさんNGNG
でかい表示用エディットコントロールと、一行の入力用
エディットコントロール作ってあたかも一つのウィンドウの
ように見せる。行の取得はリターンキーのKeyonとかを
捕らえる。とかね
0948945NGNG
エラーやログ表示+若干のコマンド実行が出来るようなウインドウを
>>946
エラーやログ表示+若干のコマンド(オリジナル)が
実行出来るような物がほしいもんで。
コンソールだとちょっと使い勝手が…。

>>947
DOS窓のように、出力の一部だけ保持するような物が作りたいのですが、
エディットコントロールで文字吐きつづけるとバッファが一杯一杯になってしまうんで。
バッファが一杯にならないように始めに書いた奴から消していくには
どうしたら良いのやら…
0949デフォルトの名無しさんNGNG
>>948
コントロールに頼らず自分で描画するようにすればいいだろ?
0950デフォルトの名無しさんNGNG
マニアックな質問だよね。結局アルゴリズムの
問題だよね。・・・・(ひょっとしてできる人?)
だったりして(爆)
0951946NGNG
>>948
何か勘違いしてない?
誰もコンソールアプリを作れだなんて言ってないよ。
コンソールを作って、そこに出力すりゃいいじゃん。
勿論、そこから入力もできるし。
0952デフォルトの名無しさんNGNG
コンソール画面の情報を文字列バッファにしたって
大きさにしてたいしたことないから、org_bufとbuf
をやって処理したほうが安全なのかな、
org_buf[1024]
buf[1024]
char *lpbuf
.......
if(strlen(org_buf)>1024-コンソール一行分の最大バイト)
lpbuf=strstr(org_buf,"\r\n")(みたいな)
strcpy(buf,lpbuf);
strcpy(org_buf,buf);
やればできるさ!
0953デフォルトの名無しさんNGNG
EM_SETREADONLYもつけなYO!
0954デフォルトの名無しさんNGNG
コンソールでも出来そうではあるんだけど、コンソールほどのデカイウインドウは要らないというか…
ウインドウの一部に組み込んで使えるような奴がほしい。
たとえて言うならなんだろな?
VCのアウトプットウインドウに入力足した奴??
それをエディットコントロールで簡単に出来ないものかと考えたんだけど…

ちなみにコンソールって、AllocConsoleしかやったこと無いけど
ウインドウ側でコンソール閉じたときにメインプログラムが終了しないように出来る?
0955945NGNG
954==945
説明が下手で
(;´Д`)スマソ
0956936NGNG
>>944
遅レスすみませんでした。
ありがとうございました。
英語ドキュメントは何とか読んでみます。
0957デフォルトの名無しさんNGNG
親Windowがアクティブになっても
子供のポップアップスタイルのダイアログボックス
は親の後ろに隠れません。隠れるようにしたいんだけど、
これがなかなかできそうでできません。どこのあたりに
どんなフラグくっつけたらいいのでしょうか。
0958デフォルトの名無しさんNGNG
em_limittext
0959デフォルトの名無しさんNGNG
親ウィンドウをNULLにしてダイアログを開け。
だが、98%そのプログラムはクソプログラムだ。
0960デフォルトの名無しさんNGNG
forkしたい。Windowsで。何か方法ないですか?
メモリ空間が書き込み時コピーで処理されると理想です。
0961デフォルトの名無しさんNGNG
・thread使う
・cygwinのforkを使う
・forkではなく、CreateProcessで使える方法を考える
・MSに就職/ソースコード入手して、Win32にforkを実装する
お好きなのをどうぞ。
0962デフォルトの名無しさんNGNG
>>961
POSIX サブシステムを使う、というのは?
0963デフォルトの名無しさんNGNG
>>959
なんで糞プログラムなのか理由を教えてほしいョ
0964デフォルトの名無しさんNGNG
なんで後ろに隠したいのか理由を教えて欲しいョ
0965デフォルトの名無しさんNGNG
俺も957と同じこと考えてた。
>>959
俺も教えてほしいョ

NULLで作成すると、そのウインドウがタスクバーに表示される。
これをどうにかしたい。
0966デフォルトの名無しさんNGNG
サイズ1x1の親ウィンドウの下に子ウィンドウをだしとキャいいだろ
0967デフォルトの名無しさんNGNG
DialogBoxParamみたいに初期値を渡して
モードレスダイアログを作りたいんだけど如何すればよろしゅう?
0968デフォルトの名無しさんNGNG
CreateDialogParam
ではいかんの?
0969デフォルトの名無しさんNGNG
新スレ
http://pc.2ch.net/test/read.cgi/tech/1006783012/
0970デフォルトの名無しさんNGNG
>>968
そんなものが TT
マジありがとうございました
なんでみつからなかったんだろ、ダハハ
0971デフォルトの名無しさんNGNG
>>964
親ウィンドウのキャプションクリックしたとき全ヴ後ろに隠れてくれないと
ストレスがたまって来るから
0972デフォルトの名無しさんNGNG
常に手前・・・ごふっ
0973デフォルトの名無しさんNGNG
(´-`).。oO(新スレが酷い有様だ。何でだろう?)
0974デフォルトの名無しさんNGNG
(´-`).。oO(あれは無かったことにして、もいっこスレ立てた方がいいかも?)
0975デフォルトの名無しさんNGNG
(´-`).。oO(心配するな、もうネタも尽きるだろうて)
0976965NGNG
>>966
それしか無いっぽい。
ちょっと残念だが、どうもありがとう。
0977>>597NGNG
つか、なんでモードレスダイアログボックスの動作を、
モーダルダイアログで実現させたい、みたいなワケワカラン事
云うわけ?
0978デフォルトの名無しさんNGNG
だからクソプログラムだからだよ
0979デフォルトの名無しさんNGNG
>>977

957 のような質問は、ウィンドウの所有関係(たぶん親子関係も)を
良く知らないためだと思います。このような仕様は、Windows の動作
としても変ですし、ユーザにとってもストレスのあるものに違いありません。

質問者には、モードレスダイアログとモーダルダイアログとの違いをよく研究し、また
トップレベルウィンドウの相互の所有関係について調べることをお薦めします。
0980デフォルトの名無しさんNGNG
新スレ
http://pc.2ch.net/test/read.cgi/tech/1006783012/
0981デフォルトの名無しさんNGNG
はうっ!
レス数が950を超えています。1000を超えると書き込みができなくなります。