Preheat the oven to 350°F (175°C).
Combine graham cracker crumbs, melted butter, and sugar in a bowl. Press into the bottom and up the sides of a 9-inch pie plate. Bake for 10 minutes, then let cool completely.
In a medium saucepan, whisk together the milk, coconut milk, sugar, cornstarch, and salt over medium heat.
In a separate bowl, lightly beat the egg yolks.
Slowly pour about ½ cup of the hot milk mixture into the yolks while whisking constantly to temper them, then pour the yolk mixture back into the saucepan.
Continue cooking over medium heat, whisking constantly, until the mixture thickens and starts to bubble.
Remove from heat and stir in butter, vanilla, and shredded coconut.
Pour the filling into the cooled crust and smooth the top.
Cover with plastic wrap (pressing it gently onto the surface) and refrigerate for at least 4 hours or until set.
In a mixing bowl, beat the whipping cream, powdered sugar, and vanilla extract until stiff peaks form.
Spread the whipped cream over the chilled pie and top with toasted coconut before serving.